c++ - 在 C 中使用 *&*&p 理解复杂的指针和寻址运算符

标签 c++ c pointers addressof

谁能解释下 printf 是如何打印 hello 的?

#include<stdio.h>

void main()
{
 char *p;
 p="hello";
 printf("%s",*&*&p);
}

我知道 *&p... 表示 p 中的值,即字符串“hello”的地址。最初的 *&

发生了什么

最佳答案

如你所说,*&p的意思是p,也就是连续的*&抵消了。因此 *&*&p 也变成了 p

正如@Kerrek(在评论中)所说,*&p 产生一个左值,因此您再次获取它的地址。


请注意,您的代码不符合标准。 main() 必须有 int 作为返回类型。并且您不能将 "hello" 分配给 non-const char*。它必须是 const char*。一个标准的一致性代码是这样的:

#include<stdio.h>

int main()
{
   const char *p = "hello"; 
   printf("%s",*&*&p);
}

关于c++ - 在 C 中使用 *&*&p 理解复杂的指针和寻址运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12303287/

相关文章:

c - C 中的回车/回车

c++ - C/C++ 中的图像缩放和旋转

c - 将变量映射到 C 中的特定地址

c++ - 抽象基类(成员变量)的 shared_ptr 是一个未声明的标识符

c - C 中的指针声明与有限数组声明

c++ - 将 lua 与 c++ dll 一起使用

c++ - 如何通过现有的静态数组初始化 C 风格结构中的静态数组?

c++ - int p = *(int *)i 和 int p = *(int *)&i 之间的区别

c - 在 Visual Studio 2010 中使用 C99 之前的语法

c++ - libjingle的XmppPump编译问题