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

k2arahey  于 2023-05-28  发布在  其他
关注(0)|答案(2)|浏览(114)

我在使用指针时遇到了一个问题。到目前为止,我知道当我们创建任何数据类型的数组时,数组的名称实际上是指向数组的第一个索引的指针(可能是静态指针)。对吗?
所以我试图实现的是创建另一个指针,它可以保存数组名的地址(即指向另一个指针的指针,在我的例子中是数组名)
例如:

char name[] = "ABCD";  // name holding the address of name[0]
char *ptr1 = name;     // When is this possible?
char **ptr2 = &name;   // Why not this?
                       // It gives an error: cannot convert char(*)[5] to char**

我使用代码块作为IDE。

5vf7fwbs

5vf7fwbs1#

TL;DR数组不是指针。

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

char (*ptr2)[5] = &name;

或者,

char (*ptr2)[sizeof(name)] = &name;

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

laik7k3q

laik7k3q2#

如果你想使用指针到指针,你可以使用这个:

int main(void){
  char name[] = "ABCD";
  char *ptr1 = name;
  char **ptr2 = &ptr1;
  std::cout << *ptr1 << std::endl;
  std::cout << **ptr2 << std::endl;
}

干杯。

相关问题