1.指针 偏移
选项
解答:
&a+1不是首地址+1,系统会认为加了一个整个a数组,偏移了整个数组a的大小。
&a是取地址后,再+1;而ptr-1是先首地址-1,再对整体取值*。
对地址+或-,是整体偏移;对指针+1或-1,是数组内地址偏移。
2.定义 类型
解答:
#define后的内容 两部分相等 INT_PTR=int*;
INT_PTR a,b; 即为 int* a,b
所以a是指针,b是整型变量
3. 数组 指针
解答:
对于a[row],a是一维数组的首地址,* (a+1) = a[1];
对于a[x][y],可以看作(a[x]) [y],即(a[x])是(a[x])[y]的首地址,* (a[0] +1) = a[0][1]
那么对于(a[row]) [col],a代表什么呢?让我们变换一下:
(a[row]) [col] = (* (a+row) )[col] =* (* (a+row) + col)
这样看,a[row]是不是很像一个指针数组,它的内部元素全部是指针,a[0]即指向第0行的指针,a[1]即指向第一行的指针。这样理解a也就比较容易了,可以把它当做数组a[row]的首地址,即 a = &a[0],于是乎 *(a+row) = a[row].
二维数组中表示a[i][j]的地址的方式:
a[i] + j = * (a+i) +j = &(a[i][j])
未解决: