0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数组名是不是指针

学益得智能硬件 来源:学益得智能硬件 2023-06-25 17:06 次阅读

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

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

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

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

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

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语言中指针数组数组指针的区别

    指针数组之间存在着紧密的关系。在本文中,我们将探讨指针数组的关系、指针算术和数组遍历、多维
    发表于 08-17 15:29 395次阅读

    从编译器角度分析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

    指针数组数组指针的区别

    这里我们区分两个重要的概念:指针数组数组指针
    的头像 发表于 06-29 15:30 2w次阅读
    <b class='flag-5'>指针</b><b class='flag-5'>数组</b>和<b class='flag-5'>数组</b><b class='flag-5'>指针</b>的区别

    理解函数指针、函数指针数组、函数指针数组指针

    理解函数指针、函数指针数组、函数指针数组指针
    的头像 发表于 06-29 15:38 1.5w次阅读
    理解函数<b class='flag-5'>指针</b>、函数<b class='flag-5'>指针</b><b class='flag-5'>数组</b>、函数<b class='flag-5'>指针</b><b class='flag-5'>数组</b>的<b class='flag-5'>指针</b>

    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语言中<b class='flag-5'>指针</b>与<b class='flag-5'>数组</b>

    C语言指针数组的区别

    在C语言教程中我们使用通过数组名通过偏移和指针偏移都可以遍历数组,那么指针数组到底有什么区别??
    的头像 发表于 07-18 16:29 1889次阅读

    二维数组数组指针以及指针数组

    二维数组数组指针以及指针数组
    的头像 发表于 08-16 09:02 2576次阅读

    C语言数组元素的指针

    C语言调用函数时虚实结合的方法都是采用“值传递”方式,当用变量名作为函数参数时传递的是变量的值,当用数组名作为函数参数时。 由于数组名代表的是数组元素地址,因此传递的值是地址,所以要去形参为
    的头像 发表于 03-10 14:45 829次阅读

    C++数组名数组拷贝详解

    C++数组间赋值不能直接通过数组名称 randy = sesame进行,因为数组名不是指针,大部分情况下,编译器会隐式转换为指向
    发表于 08-21 15:09 444次阅读
    C++<b class='flag-5'>数组名</b>和<b class='flag-5'>数组</b>拷贝详解

    数组指针不能混用的情况

    指针的基本概念。数组是一组相同类型的元素的集合,而指针是一个变量,它存储了一个地址,该地址指向内存中的某个位置。在 C/C++ 中,数组名称可以当作指向
    的头像 发表于 12-07 13:46 564次阅读

    数组指针不相同吗?数组指针有哪些区别

    数组就是指针指针就是数组,这样的言论在评论区看到不下于10次。
    的头像 发表于 12-13 16:34 1288次阅读
    <b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>不相同吗?<b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>有哪些区别

    面试常考+1:函数指针指针函数、数组指针指针数组

    在嵌入式开发领域,函数指针指针函数、数组指针指针数组是一些非常重要但又容易混淆的概念。理解它
    的头像 发表于 08-10 08:11 658次阅读
    面试常考+1:函数<b class='flag-5'>指针</b>与<b class='flag-5'>指针</b>函数、<b class='flag-5'>数组</b><b class='flag-5'>指针</b>与<b class='flag-5'>指针</b><b class='flag-5'>数组</b>