数组名是不是指针

描述

数组到底是不是指针?这个问题隔三岔五就会被问一遍。其实只要搞清楚他们的原理,并且能熟练的使用,完全没有必要纠结这个问题。

数组是内存中的一块连续内存,之所以他能跟指针扯上关系,是因为数组名表示了数组第一个元素的地址,于是很多同学就认为数组名是指针。

准确的讲,数组名也只是个标识符,方便用户使用罢了。

把它理解成地址常量更合适一些。

所以对数组名加加这个操作,编译器是不允许的。

int array[5] = {1, 2, 3, 4, 5};
array++;
  但是访问元素的时候,只要你不去修改数组名,用起来跟指针没什么区别。
int array[5] = {1, 2, 3, 4, 5};
*(array + 1);
 
指针在计算机里面也是一块内存,不过只是一个单独的元素,不像数组,可以由多个元素组成。一般占4字节或者8字节。它里面保存的是其他内存的地址。

所以指针用起来就比较灵活,在合法的情况下,可以来回移动。

如果现在有个数组,把数组第一个元素的地址保存在指针里面,那访问数组元素既可以用取值的方式,又可以用数组下标的方式。
int array[5] = {1, 2, 3, 4, 5};
int *p = array;
p[1];
*(p + 1);
 
总结一下,数组和指针是两个不同的东西,严格来讲,不能把数组等同于指针,包括数组名,也不能等价于指针,只是很多场景下,他们可以互相表示。

作为初学者,我也不太建议去纠结这样的问题,这个问题也只有在面试的时候会遇到,学习的时候,把他们原理搞清楚,能正确的使用数组名或者指针去访问数据,也就足够了。  

 

 审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分