【发布时间】:2015-08-06 01:31:52
【问题描述】:
有人能清楚地解释一下多重引用和取消引用背后的概念吗?为什么下面的程序输出为 '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;
}
我读到连续使用 '*' 和 '&' 会相互抵消,但是这种解释没有提供上述代码中生成两个不同输出的原因?
【问题讨论】:
-
“使用 '*' 和 '&' 会互相抵消”所以试试
printf("%c\n", ptr);。想想。 -
在第二种情况下,您首先将
&运算符应用于指针本身,因此您将获得char **。然后你继续引用和取消引用,所以你最终打印指针值而不是它指向的值。 -
@FilipeGonçalves 这就是答案
标签: c pointers reference dereference