c - 需要澄清指针递增

标签 c pointers

请帮助我理解以下代码以其方式工作的原因:

#include <stdio.h>

int main(){
    int a = 10;
    void *b = &a;
    int *p = b; 
    printf("%u",*p++);
    return 0;
}

我知道 printf 的输出将是 10,但我不太明白为什么 *p++ 是 10

这是我的步骤:

1) void *b = &a;将a的地址存入指针b

2) int *p = b; 指针 p 现在指向与指针 b 相同的数据项

3) printf("%u",*p++); 是我感到困惑的地方...指针 p 的取消引用是 a,它是 10...不是 *p++ 基本上等同于 10+1 即 11?

最佳答案

*p++ 本质上是 *(p++)。它在递增之前评估 p 的值,这是 a 的地址。然后取消引用它,它的计算结果为 10

关于c - 需要澄清指针递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19462193/

相关文章:

c - 正确使用文件指针

c++ - 等于运算符==可以用来做校验位吗?

c++ - 使用 getline 错误读取全局 istream*

c++ - 带有 void * 指针的 Typedef 函数

C 在循环中返回无效地址

c - 在 Windows 上,spawnl 返回 EINVAL

c - 如何在C中使用√符号

c - 使用 getline 与 fgets 进行基本文件打印

c - 如何将字符串中的指针值传递给指针

C++如何在不复制的情况下将元素存储在双端队列中