指针的增量是否与整数的增量不同?

Does increment in pointer not same as that of integer?

考虑下面的代码:

void increment(int* a)
{
    printf("%d\n",a);
    *a=*a+1;
}
int main()
{
    int a=10;
    int* p=&a;
    increment(&a);
    printf("%d",a);
    return 0;
}

这会将 a 递增为 11 但是这 :

void increment(int* a)
{
    printf("%d\n",a);
     *a++;
}
int main()
{
    int a=10;
    int* p=&a;
    increment(&a);
    printf("%d",a);
    return 0;
}

以上代码生成的值为 10。

指针运算不像整数运算还是我在这里遗漏了什么??

您缺少操作员优先级。 (*a)++;*a++ 完全不同。 第一个递增地址 a 的值,第二个 post 递增 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; 的 shorthand,其他变体也是可能的:++a[0]a[0]++(*a)++,但首选解决方案是:

*a += 1;