gpt4 book ai didi

c - char ptr 的值在++ 递增后不会改变

转载 作者:行者123 更新时间:2023-11-30 21:17:42 25 4
gpt4 key购买 nike

int main(){
char* str="Hello";
// str: 0x4006db, *str++: l, str: 0x4006db, *str++: e, str: 0x4006db, *str++: H
printf("str: %p, *str++: %c, str: %p, *str++: %c, str: %p, *str++: %c\n", str, *str++, str, *str++, str, *str++);
}

我希望这不是另一个愚蠢的问题:

  1. 为什么str指针的值在我增加*str++后没有改变?

  2. 如果str每次我执行 *str++ 时,指针值都没有改变我应该产生相同的值,而不是 l e H .

  3. 为什么这封信是l首先出现,而不是 H

顺便说一句,我还查看了 &str 的值,在我执行*str++之前和之后是一样的.

任何帮助将不胜感激。谢谢

最佳答案

您通过以下方式调用了未定义的行为:

  1. 修改字符串文字。
  2. 打印指针而不将其强制转换为 (void *)
  3. 在两个序列点之间多次修改同一对象。

另请注意,函数调用的参数的求值顺序未指定

调用一种未定义的行为是致命的,这意味着当您想要破坏世界时,它的一切正常工作都可能发生,并且您调用了三种:(

另请参阅:

http://www.c-faq.com/expr/evalorder2.html

http://www.c-faq.com/expr/comma.html

关于c - char ptr 的值在++ 递增后不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36130330/

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