c++ - 数组的地址 VS 指针到指针 : Not the same?

标签 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**

我将代码块用作 IDE。

最佳答案

TL;DR 数组不是指针。

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

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

或者,

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

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

关于c++ - 数组的地址 VS 指针到指针 : Not the same?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35637750/

相关文章:

arrays - 使用 numpy `as_strided` 函数创建任意尺寸的补丁、瓷砖、滚动或滑动窗口

arrays - 编码/十六进制 : invalid byte: U+0068 'h' Golang

c++ - 嵌套 for 循环逻辑错误与时间逻辑错误

c - 向伪终端发送特殊字符?

c++ - 从 C++ 中的另一个 .exe 生成用户自定义的 .exe

c - 将指针返回到自身

c - C 中的 realloc 字符串表在第四次迭代时崩溃

ruby - 从 Jekyll 插件返回目录中的文件列表?

c++ - 谷歌浏览器,本地客户端支持和开发

c++ - 尝试使用 C++ 创建工厂方法时出错