指针的值类型是不是int型?(本人记得就是int型)int型的值做累加1以后应该就是比原来的值大1吧?例如指针p的值为2293264,那么加1以后应该是2293265吧?
但是在指向一个数组元素的时候本人发现并非本人所想的这样:
但是在指向一个数组元素的时候本人发现并非本人所想的这样:
void main() { int *p,a[] = {1,2,3,4,5,6,7,8,9,10}; int *end = a+10; for(p = a;p < end;p++){ printf("%i,\t%i\n",*p,p); } return; }
结果:
如上图,本人以为数组a中每个元素的指针的值会是一个以1为公差的等差数列,但实际上显示出来的是一个以4为公差的等差数列。为什么这种情况下,指针的值明明是int类型的,在加1以后的值,实际上是加4的值?
解决方案
5
15
首先题主要明白,数组直接名字有2个含义,假如直接sizeof数组名的话,得到的是数组的完整大小,假如直接写数组的 话实际上又是首元素的地址 原因是数组有n个地址单元,而这个地址单元又是已知的+1的含义其实是移动到下一地址单元而非值加一,例如
int a[10];
a+1实际上是a+sizeof(int)*1
假如
char a[10];
a+1实际上是a+sizeof(char)*1