对于一维数组来说,它的数组名也是第一个元素的地址。所以把它赋给一个指针就可以了,如下所示:
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 question在C FAQ list .
关于c - 二维数组地址和指向其第一个元素的相应指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406690/