指针的基类型是什么?
问题:下面的循环是对数组a的第i列清零:int a[NUM_ROWS] [NUM_COLS], (*P) [NUM_COLS];
...
for (p= &a[0]; p<&a[NUM_ROWS]; P++)
(*P) [i] = 0;
书上说这里讲p声明为指向长度为NUM_COLS 的整形数组的指针,我想问下,这个指针和普通的指针有区别嘛?有的话是声明区别,没有的话那为什么p++就把p移到了下一行呢?大写字母里面的是定义好的宏,不重要。
这个问题已经有答案了,但是答案我都看不懂:
我们这么理解。
int *p;
p++ 就是将p向下移动4个字节。
cha* p;
p++ 就是将p移动一个字节。
反正就是p++就是将p移动p指向的内容所占的内存大小。
你可以看到例子中,p指向的内容占了一行所需的内容,所以p++就指向下一行了。//p指向的内容占了一行所需的内容是什么意思?
虽然看不懂答案,但是我继续百度,又发现了下面这些东西:
因此,对于二维数组,象a[0]++这样的表达式是非法的。若有表达式a[0]+1,表达式中1的单位应当是2个字节。在以上定义中,指针变量p的基类型与a[i](0≤i<3)相同,因此,赋值语句p=a[i];是合法的。我们已知a[i]也可以写成:*(a+i),故以上赋值语句也可写成:p=*(a+i);。
我感觉到这里提到的基类型可能是上面问题的答案。但是,指针的基类型到底是什么东西?我搜索了一下,完全搜不到一点资料。