gpt4 book ai didi

c - C 中的多重引用和取消引用

转载 作者:行者123 更新时间:2023-11-30 18:39:18 25 4
gpt4 key购买 nike

有人可以清楚地向我解释多重引用和取消引用背后的概念吗?为什么以下程序的输出为“h”?

int main()
{
char *ptr = "hello";
printf("%c\n", *&*&*ptr);

getchar();
return 0;
}

不是 this ,而是生成 'd' ?

int main()
{
char *ptr = "hello";
printf("%c\n", *&*&ptr);

getchar();
return 0;
}

我读到连续使用“*”和“&”会相互抵消,但是这个解释没有提供上述代码中生成的两个不同输出背后的原因?

最佳答案

第一个程序产生 h因为&*彼此“取消”:“取消引用 X 的地址”返回 X:

  • ptr - 指向 "hello" 首字符的指针文字
  • *ptr - 取消引用指向初始字符的指针,即初始字符
  • &*ptr指向初始字符的指针的取消引用的地址,即指向初始字符的指针,即 ptr本身

等等。正如你所看到的,一对 *&带您回到开始的位置,因此您可以从取消引用/获取地址表达式中消除所有此类对。因此,您的第一个程序的 printf相当于

printf("%c\n", *ptr);

第二个程序有未定义的行为,因为指针被传递到 printf格式说明符为%c 。如果将相同的表达式传递给 %s ,这个词hello将打印:

printf("%s\n", *&*&ptr);

关于c - C 中的多重引用和取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30423589/

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