C 指针的增量和整数的增量不一样吗?
考虑以下代码: 这将a增加到11,但这: 上述代码生成的值为10C 指针的增量和整数的增量不一样吗?,c,pointers,pointer-arithmetic,C,Pointers,Pointer Arithmetic,考虑以下代码: 这将a增加到11,但这: 上述代码生成的值为10 指针运算与整数运算不同,还是我在这里遗漏了什么??您缺少运算符优先级。(*a)+与*a++完全不同。 第一个在地址a处递增值,第二个在后递增a处递增值,并在原始地址处获取值。语句printf(“%d\n”,a)不打印a指向的整数的值。如前所述,它调用未定义的行为 printf("%p\n", (void*)a); 将打印指针的值,即整数变量的地址 printf("%d\n", *a); 将打印整数的值 此外,*a=*a+1与*
指针运算与整数运算不同,还是我在这里遗漏了什么??您缺少运算符优先级。
(*a)+
与*a++
完全不同。
第一个在地址a
处递增值,第二个在后递增a
处递增值,并在原始地址处获取值。语句printf(“%d\n”,a)
不打印a
指向的整数的值。如前所述,它调用未定义的行为
printf("%p\n", (void*)a);
将打印指针的值,即整数变量的地址
printf("%d\n", *a);
将打印整数的值
此外,*a=*a+1
与*a++不同代码>。由于运算符优先级规则,*a++
被解析为*(a++)
,指针是递增的,而不是指向的值。您可以使用++*a
作为*a=*a+1的缩写代码>,以及其他可能的变体:++a[0]
,a[0]++
,(*a)+
,但首选的解决方案是:
*a += 1;
@芭丝谢芭是的<代码>***a=*a+1**
WT*?a++实际上做了什么?它增加了地址??如果是,怎么办??我无法想象,a
只是局部变量。它会递增,但不再使用,所以不会造成伤害。如果您写入它,它将在原始变量(*a)+
工作后更改内存;a[0]+
也是如此。
printf("%d\n", *a);
*a += 1;