C++数组作为指针问题

dim*_*yak 5 c++ arrays pointers char

为什么这是可能的:

char buf[10], *pbuf = buf, **ppbuf = &pbuf;
Run Code Online (Sandbox Code Playgroud)

这不是:

char buf[10], **ppbuf = &buf;
Run Code Online (Sandbox Code Playgroud)

据我所知,第二行只是第一行的简写.

Dan*_*lau 5

他们不等同.

*pbuf = buf
Run Code Online (Sandbox Code Playgroud)

这意味着," pbuf是一个指向类型的指针char,其值是地址buf." 由于buf是一个字符数组,这是有效的.

**ppbuf = &pbuf
Run Code Online (Sandbox Code Playgroud)

这意味着," ppbuf是一个指向类型指针的指针char,其值是地址pbuf." 既然pbuf是指向类型的指针char,这是有效的.

**ppbuf = &buf
Run Code Online (Sandbox Code Playgroud)

这意味着," ppbuf是一个指向类型指针的指针char,其值是地址buf." 由于buf是一个字符数组,这失败了.


CB *_*ley 4

&buf类型错误。&buf是一个指向 10 数组的指针charppbuf必须使用指向 a 的指针进行初始化char

在第一次初始化中, whilebuf表示一个数组,它衰减为char*指向其第一个元素,因此初始化是有效的。

你也不能这样做:char buf[10], **ppbuf = &(&buf[0]);因为&buf[0]不是左值,所以你不能获取它的地址。

  • @dimayak:不。数组的名称就是数组的名称。它会衰减为指向表达式上下文中第一个元素的指针,而不是作为一元“&”或“sizeof”的参数。 (4认同)
  • @dimayak:在适当的情况下,数组变量会隐式转换为其第一个元素(char*)的地址。但它不是指向 char* 的指针。 (2认同)