gpt4 book ai didi

c - 为什么 *p++ 与 *p += 1 不同?

转载 作者:太空狗 更新时间:2023-10-29 16:19:17 26 4
gpt4 key购买 nike

考虑:

void foo1(char **p) { *p++; }
void foo2(char **p) { *p += 1; }

char *s = "abcd";
char *a = s;
foo1(&a);
printf("%s", a); //abcd

但是如果我使用 foo2() 而不是:

char *a = s; 
foo2(&a);
printf("%s", a); //bcd

谁能解释一下?

最佳答案

关键是+=++ 运算符的优先级。 ++ 的优先级高于+=(事实上,赋值运算符在 C 中具有第二低的优先级),因此操作

*p++

表示取消引用指针,然后将指针自身 加 1(通常,根据指针算法的规则,它不一定是一个字节,而是 sizeof(*p) 关于结果地址)。另一方面,

*p += 1

表示将指针指向的值加一(并且不对指针本身做任何事情)。

关于c - 为什么 *p++ 与 *p += 1 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12221396/

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