c - 指针的增量与整数的增量不一样吗?

标签 c pointers pointer-arithmetic

考虑下面的代码:

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。

指针算术不像整数算术,还是我在这里遗漏了一些东西?

最佳答案

您缺少运算符(operator)优先级。 (*a)++;*a++ 完全不同。 第一个在地址 a 处递增值,第二个在地址 a 处递增值并在原始地址处获取值。

关于c - 指针的增量与整数的增量不一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38740376/

相关文章:

c - 使用指针查找矩阵的转置(我的代码有什么问题?)

工作中的 C struct hack

c - 如何使用 c 扩展扩展我的 ruby​​ 类?

c - 在 C 中对 double 数组进行排序

c++ - 使用指针从 char array[] 中移除/删除字符

c - 语句的输出怎么是 'E'

c++ - 能否从指向子对象的指针获得指向完整对象表示元素的指针?

range - 为什么数组范围基元消耗它们的源?

c - 最大化产生给定总和的不同数字的计数 'k'

c - 转换为兼容返回类型的 union 会满足函数指针的兼容性标准吗?