gpt4 book ai didi

c - 在 C 中用指针返回左值

转载 作者:行者123 更新时间:2023-12-01 15:55:06 25 4
gpt4 key购买 nike

我尝试执行以下代码,

int val=10;
printf("%d",++val++);

正如预期的那样,我收到了以下错误消息,“lvalue required as increment operand”。但是当我进行以下更改时,程序运行良好。

int val=10;
int *ptr=&val;
printf("%d",++*ptr++);

该程序的输出为 11。输出值并不奇怪。

但整个构造 ++*ptr++ 是一个 lvalue 而不是 rvalue 令人困惑。

我打印了ptr前后的内容如下,

printf("%u\n",ptr);
printf("%d",++*ptr++);
printf("\n%d\n",ptr);

22935322293536 是打印在屏幕上的地址。很明显 ptr 已经递增并且涉及指针添加。

输出是有意义的,除了 *ptr 检索地址存储在 ptr 中的变量的内容,即 10 ++*ptr 将其递增到 11。这绝对是一个 rvalue。但我相信后增量 (++) 已绑定(bind)到 ptr。为什么这样? C 中的此类绑定(bind)有哪些规则?

最佳答案

您的观察是正确的,即前缀 ++ 应用于指针指向的值 (int),而后缀 ++ 应用于指针本身.

这是因为后缀 ++ operator has higher priority* 优先。所以首先 ptr 递增并返回它的原始值,然后这个指针被解除引用并且它指向的 int 值递增并由表达式返回。前缀 ++ 应用在 * 之后,因为它在代码中的顺序和依赖性,无论如何它们具有相同的优先级。

PS:打印指针的正确格式化程序是“%p”。

关于c - 在 C 中用指针返回左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38050334/

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