c - 二维数组地址和指向其第一个元素的相应指针

标签 c arrays pointers

对于一维数组来说,它的数组名也是第一个元素的地址。所以把它赋给一个指针就可以了,如下所示:

char data[5];
char* p_data=data;

所以我觉得二维数组应该也是一样的。数组名应该是第一个元素地址的地址。所以,我想做这样的事情:

char data[5][5];
char** pp_data=data;

然后我收到一条警告,指出指针类型 char**char[ ][ ] 不兼容。

为什么会这样?我对指针和数组的概念理解有误吗?

最佳答案

你是对的,数组通常由指向其第一个元素的指针引用。但是当你拥有“二维”数组时

char data[5][5];

您实际拥有的是一个数组的数组。数组 data 的第一个元素是一个包含 5 个字符的数组。所以这段代码可以工作:

char (*pa_data)[5] = data;

这里的 pa_data 是一个指向数组的指针。编译器不会提示它,但它实际上可能对您有用,也可能没有用。

的确,像您的 char **pp_data 这样的指向指针的指针可以像二维数组一样工作,但您必须为其分配一些内存才能工作。事实证明,在数组的数组 char data[5][5] 中,没有指向 char 的指针用于 pp_data 到成为指向的指针。 (特别是,您可以pp_data = &data[0][0]。)

另见 this questionC FAQ list .

关于c - 二维数组地址和指向其第一个元素的相应指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406690/

相关文章:

C - 如何打印二维数组中指针[0][0]的值

c - 如何通过引用将创建的指针数组传递到结构中?

Java 字节缓冲区完全填满

C - 分配指针数组和用法 - 类型转换安全

c++ - 幂运算符C语言程序

arrays - 在 Oracle PL/SQL 中声明动态数组

sql - PostgreSQL 如何查询字符串数组

c++ - 指针无缘无故更改值c++

c - Realloc 操作超出其范围的数据

c++ - RTMP FFmpeg 复用示例