*(*(a+1)+2) 一直不理解是不是应该背诵

ludongxing
ludongxing 09月24日 字数 430

*(a[1]+2), *(*(a+1)+2), a[1][2]

如果我有一个二维数组int a[9][9],那么以上这三个都表示数组a的第1行第2列元

素的值。其中a[1][2]很好理解,按数组的规定,a[1][2]就是第1行第2列的值,这

没啥疑惑,这就是定义就是这样规定的。

但是,前面两个带指针的表达式怎么理解,就强行背诵 *(a[i]+j)和 *(*(a+i)+j)

表示第i行第j列的值吗?有没有什么自然而然的办法来说明这样写不是规定,而是推导

出来的?

如果要是必须强行背诵的话,那么100维的数组是不是很容易背错?

3 个回复
ArchLinux
a lightweight and flexible distribution 09月24日

你只要知道 C 语言里面 a[i] 和 *(a+i) 这两个表达式等价就行了,并且对 T* 类型的指针 ``T *a`` 或者 T 类型的数组 ``T a[]``,``a[i]`` 和 ``*(a+i)`` 的类型都是 T.

【 在 ludongxing (ludongxing) 的大作中提到: 】

: *(a[1]+2), *(*(a+1)+2), a[1][2]

: 如果我有一个二维数组int a[9][9],那么以上这三个都表示数组a的第1行第2列元

: 素的值。其中a[1][2]很好理解,按数组的规定,a[1][2]就是第1行第2列的值,这

: ...................

canidy
我的目的是灌水 10月01日

知道变量的数据类型就对了

【 在 ludongxing 的大作中提到: 】

: *(a[1]+2), *(*(a+1)+2), a[1][2]

: 如果我有一个二维数组int a[9][9],那么以上这三个都表示数组a的第1行第2列元

: 素的值。其中a[1][2]很好理解,按数组的规定,a[1][2]就是第1行第2列的值,这

: ...................

origin008
Origin 10月02日

*(p+d) == p[d],记住这个就行了

比如第一个例子,p: a[1], d:2,所以是a[1][2]

【 在 ludongxing 的大作中提到: 】

: *(a[1]+2), *(*(a+1)+2), a[1][2]

: 如果我有一个二维数组int a[9][9],那么以上这三个都表示数组a的第1行第2列元

: 素的值。其中a[1][2]很好理解,按数组的规定,a[1][2]就是第1行第2列的值,这