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++);
}
我希望这不是另一个愚蠢的问题:
为什么str指针的值在我增加
*str++
后没有改变?如果
str
每次我执行*str++
时,指针值都没有改变我应该产生相同的值,而不是l
e
H
.为什么这封信是
l
首先出现,而不是H
?
顺便说一句,我还查看了 &str
的值,在我执行*str++
之前和之后是一样的.
任何帮助将不胜感激。谢谢
最佳答案
您通过以下方式调用了未定义的行为:
- 修改字符串文字。
- 打印指针而不将其强制转换为
(void *)
。 - 在两个序列点之间多次修改同一对象。
另请注意,函数调用的参数的求值顺序未指定。
调用一种未定义的行为是致命的,这意味着当您想要破坏世界时,它的一切正常工作都可能发生,并且您调用了三种:(
另请参阅:
关于c - char ptr 的值在++ 递增后不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36130330/