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

标签 c string pointers memory char

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/

相关文章:

c++ - G++ 提示 "undefined reference to"而 GCC 成功

C 编程 : Removing Unnecessary Commas From Result of Prefix Sum Code

javascript - === 和 == 如何以不同方式处理 null 比较?

c++ * vs & 在函数声明中

C++ 内存泄漏 - 我应该删除什么,在哪里删除?

python - 将指针传递给cython中的结构

c - 未声明的变量。 [标题问题]

java - 数字到单词

java - 链式字符串 - 操作大字符串缓冲区

c - 在函数参数中传递的数组是否被视为按引用调用?