加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:58:37 所属栏目:百科 来源:网络整理
导读:就一维数组而言,其数组名称也是第一个元素的地址.所以可以将它分配给指针,如下所示: char data[5];char* p_data=data; 所以我认为它应该与二维数组相同.数组名称应该是第一个元素地址的地址.所以,我想做这样的事情: char data[5][5];char** pp_data=data;
就一维数组而言,其数组名称也是第一个元素的地址.所以可以将它分配给指针,如下所示:

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

所以我认为它应该与二维数组相同.数组名称应该是第一个元素地址的地址.所以,我想做这样的事情:

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

然后我收到警告说指针类型char **与char [] []不兼容.

为什么会这样?我理解指针和数组概念错了吗?

解决方法

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

char data[5][5];

你实际拥有的是一个数组数组.数组数据的第一个元素是一个包含5个字符的数组.所以这段代码可行:

char (*pa_data)[5] = data;

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

确实,像char ** pp_data这样的指针指针可以像二维数组一样工作,但你必须做一些内存分配才能使它工作.事实证明,在数组数组char数据[5] [5]中,没有指向pp_data的指针指向char. (特别是,你不能说像pp_data =& data [0] [0].)

另见C FAQ list中的this question.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读