- 主题:*(*(a+1)+2) 一直不理解是不是应该背诵
*(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维的数组是不是很容易背错?
--
FROM 110.255.90.*
你只要知道 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列的值,这
: ...................
--
FROM 103.90.178.*
知道变量的数据类型就对了
【 在 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列的值,这
: ...................
--
FROM 123.118.14.*
*(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列的值,这
--
FROM 156.251.135.*