小编use*_*592的帖子

当您取消引用后增量 C 时会发生什么

关于这个,我收到了很多相互矛盾的答案。但正如我一直理解的那样。

当我们在 C 中有一个指针并在后增量语句中使用它时,后增量总是在代码行解析之后发生。

int array[6] = {0,1,2,3,4,5};
int* p = array;
printf("%d", *p++); // This will output 0 then increment pointer to 1
Run Code Online (Sandbox Code Playgroud)

输出 :

0
Run Code Online (Sandbox Code Playgroud)

很简单的东西。现在,我在人们告诉我的信息和我自己的经历中遇到了一些不协调的地方。

// Same code as Before
int array[0] = {0,1,2,3,4,5};
int* p = array;
printf("%d", *(p++)); // Issue with this line
Run Code Online (Sandbox Code Playgroud)

输出 :

0
Run Code Online (Sandbox Code Playgroud)

现在,当我运行代码的第二个版本时,结果是它将输出 0 然后增加指针。括号所暗示的操作顺序似乎被违反了。但是,该站点上的其他一些答案告诉我,应该发生的正确事情是增量应该在取消引用之前发生。所以我想我的问题是:我的理解正确吗?后增量语句总是在行尾执行吗?

附加信息:

我正在使用 gcc 版本 ubuntu 4.8.4 在 linux mint 上使用 gcc 进行编译

我还在 debian 4.7.2 版本的 debian 上的 gcc 上对此进行了测试

c gcc pointers operator-precedence

3
推荐指数
1
解决办法
248
查看次数

标签 统计

c ×1

gcc ×1

operator-precedence ×1

pointers ×1