指针
p+1其实并没有对p进行赋值操作,并没有改变指针p的指向,p依旧指向原来的元素,指向下一个元素的是p+1
看下面的代码,p+1并没有累计给下一次循环的p;也就是没改变p的指向
int main()
{
int arr[] = { 1,2,3 };
int* p = arr;
int i = 3;
while(i--)
{
p + 1;
printf("%d\n", *p);//1 1 1
}
return 0;
}
p++对指针进行了赋值操作,相当于p=p+sizeof(p的基类型);改变了p的指向,看下面代码,p++的值累计给了下一次循环
int main()
{
int i = 3;
int arr[] = { 1,2,3,4 };
int* p = arr;
while (i--)
{
p++;
printf("%d\n", *p);//2 3 4
}
return 0;
}
数组名++
int arr[]={0};
arr++;编译器会报错,为什么?数组名是指针常量,而++是赋值操作,常量不能进行赋值操作,所以报错
数组名+1
int arr[]={0};
arr+1;编译器不会报错,因为+1不会改变地址的指向