数组到底是不是指针?这个问题隔三岔五就会被问一遍。其实只要搞清楚他们的原理,并且能熟练的使用,完全没有必要纠结这个问题。
数组是内存中的一块连续内存,之所以他能跟指针扯上关系,是因为数组名表示了数组第一个元素的地址,于是很多同学就认为数组名是指针。
准确的讲,数组名也只是个标识符,方便用户使用罢了。
把它理解成地址常量更合适一些。
所以对数组名加加这个操作,编译器是不允许的。
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);
总结一下,数组和指针是两个不同的东西,严格来讲,不能把数组等同于指针,包括数组名,也不能等价于指针,只是很多场景下,他们可以互相表示。
作为初学者,我也不太建议去纠结这样的问题,这个问题也只有在面试的时候会遇到,学习的时候,把他们原理搞清楚,能正确的使用数组名或者指针去访问数据,也就足够了。
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
内存
+关注
关注
8文章
2995浏览量
73852 -
指针
+关注
关注
1文章
478浏览量
70500 -
数组
+关注
关注
1文章
413浏览量
25893
原文标题:数组名是不是指针
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
C语言数组名和指针
指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大
发表于 08-27 17:48
•709次阅读
从编译器角度分析C语言中数组名和指针的区别
。也许这样的声明可以编译通过(在gcc下通过了),但是把一个数组名当成一个指针来使用,别指望它能运行起来。第二,指针是一个变量,而数组名不是
发表于 06-23 23:36
C语言——指针、数组和函数
C语言——指针、数组和函数基本解释 1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。 2、
发表于 04-20 15:25
如果a是一维字符数组名,则语句scanf("%s", &a); 是正确的对吗
这句话“如果a是一维字符数组名,则语句scanf("%s", &a); 是正确的。”是正确的吗?麻烦解释一下,谢谢!!
发表于 05-17 06:35
C语言中指针与数组
#define SIZE 10int arry[SIZE]={0,1,2,3,4,5,6,7,8,9}; //数组名arry表示数组首元素的地址*int p,temp;//可直接初始化定义指针
发表于 01-13 13:11
•3次下载
C语言数组元素的指针
C语言调用函数时虚实结合的方法都是采用“值传递”方式,当用变量名作为函数参数时传递的是变量的值,当用数组名作为函数参数时。
由于数组名代表的是数组元素地址,因此传递的值是地址,所以要去形参为
C++数组名和数组拷贝详解
C++数组间赋值不能直接通过数组名称 randy = sesame进行,因为数组名并不是指针,大部分情况下,编译器会隐式转换为指向
发表于 08-21 15:09
•444次阅读
数组与指针不能混用的情况
和指针的基本概念。数组是一组相同类型的元素的集合,而指针是一个变量,它存储了一个地址,该地址指向内存中的某个位置。在 C/C++ 中,数组名称可以当作指向
评论