[英]Address of array VS pointer-to-pointer : Not the same?
我正在使用指针并想出了一个问题。 到目前为止,我知道当我们创建任何数据类型的数组时,数组的名称实际上是指向数组的第一个索引的指针(可能是静态指针)。 正确?
所以我想要实现的是创建另一个指针,该指针可以保存数组名称的地址(即指向另一个指针的指针,在我的例子中是数组名称)
例如:
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**
我正在使用代码块作为IDE。
TL; DR Arrays不是指针。
在你的代码中, &name
是一个指向5个char
的数组的指针。 这与指向char
的指针不同 。 您需要将代码更改为
char (*ptr2)[5] = &name;
要么,
char (*ptr2)[sizeof(name)] = &name;
FWIW,在某些情况下(例如,将数组作为函数参数传递),数组名称衰减到指向数组中第一个元素的指针。
如果要使用指针指针,可以使用:
int main(void){
char name[] = "ABCD";
char *ptr1 = name;
char **ptr2 = &ptr1;
std::cout << *ptr1 << std::endl;
std::cout << **ptr2 << std::endl;
}
干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.