数组VS指针到指针的地址:不一样?

Sye*_*mil 5 c c++ arrays pointers

我正在使用指针并想出了一个问题.到目前为止,我知道当我们创建任何数据类型的数组时,数组的名称实际上是指向数组的第一个索引的指针(可能是静态指针).正确?

所以我想要实现的是创建另一个指针,该指针可以保存数组名称的地址(即指向另一个指针的指针,在我的例子中是数组名称)

例如:

char name[] = "ABCD";  // name holding the address of name[0]
char *ptr1 = name;      // When this is possible
char **ptr2 = &name;    // Why not this. It give me error that cannot convert char(*)[5] to char**
Run Code Online (Sandbox Code Playgroud)

我正在使用代码块作为IDE.

Sou*_*osh 8

TL; DR Arrays不是指针.

在你的代码中,&name是一个指向5 char秒数组的指针.这与指向指针的指针不同char.您需要将代码更改为

 char (*ptr2)[5] = &name;
Run Code Online (Sandbox Code Playgroud)

要么,

char (*ptr2)[sizeof(name)] = &name;
Run Code Online (Sandbox Code Playgroud)

FWIW,在某些情况下(例如,将数组作为函数参数传递),数组名称衰减到指向数组中第一个元素的指针.