gpt4 book ai didi

字符* p = "hello"; printf ("%c %c %c %c", *p, *++p, *p++, *p);

转载 作者:行者123 更新时间:2023-11-30 18:57:11 27 4
gpt4 key购买 nike

char* p = "hello"; printf(" %c %c %c %c", *p, *++p, *p++, *p);

输出:

l l h h 

我已阅读以下线程,但仍然无法找到为什么输出类似于“l l h h”。有谁可以回答一下吗。

Pointer expressions: *ptr++, *++ptr and ++*ptr

最佳答案

由于代码同时包含 ++pp++,因此它会尝试修改 p 两次。

这些表达式出现在函数调用的参数中。 C 标准没有指定函数参数的求值顺序。

当一个程序试图以无序的方式两次修改一个对象时,该程序就会被破坏。 C 2011 标准在第 6.5 条第 2 段中表示,当对同一对象进行两次无序修改时,C 标准不会对程序的行为施加任何要求。

这意味着编译器不必使该程序以任何特定方式工作。编译器本质上“放弃”并执行它发生的任何操作。

关于字符* p = "hello"; printf ("%c %c %c %c", *p, *++p, *p++, *p);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21913155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com