gpt4 book ai didi

c - 指针运算 :++*ptr or *ptr++?

转载 作者:太空狗 更新时间:2023-10-29 16:27:20 25 4
gpt4 key购买 nike

我正在学习C语言,对++*ptr*ptr++的区别很困惑。

例如:

int x = 19;
int *ptr = &x;

我知道 ++*ptr*ptr++ 会产生不同的结果,但我不确定这是为什么?

最佳答案

由于运算符绑定(bind)的方式不同,这些语句会产生不同的结果。特别地,前缀运算符++* 具有相同的优先级,并且它们从右到左关联。因此

++*ptr

被解析为

++(*ptr)

意思是“增加 ptr 指向的值”。另一方面,postfix ++ 运算符的优先级高于解引用运算符 *。因此

*ptr++

表示

*(ptr++)

意思是“递增 ptr 以转到它指向的元素之后的元素,然后取消引用它的旧值”(因为后缀 ++ 交回值指针曾经有)。

在您描述的上下文中,您可能想要编写 ++*ptr,这将通过 ptr 间接增加 x。编写 *ptr++ 会很危险,因为它会使 ptr 前进到 x 之后,而且 x 不是一部分数组的指针将悬在内存中的某个地方(可能在其自身之上!)

希望这对您有所帮助!

关于c - 指针运算 :++*ptr or *ptr++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5209602/

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