数组名和指针的区别 您所在的位置:网站首页 c语言指针与地址有什么联系 数组名和指针的区别

数组名和指针的区别

2024-07-15 13:03| 来源: 网络整理| 查看: 265

数组名和指针之间,经常会交替使用这两个变量,比如,把一个指针当成数组来使用,或者是把数组名赋值给指针,通过指针来访问数组成员变量,但是,数组名和指针之间到底有什么样的联系与区别,以及什么情况下该使用指针,什么情况下该使用数组名,我对这个做一个小小的解读。。 这里写图片描述 上图中,定义一个数组,数组名为arr,分别打印arr本身的地址,arr首元素的地址,以及arr本身,以整型形式输出,发现,这三者的值是相同的。这里说明了一下这种情况。 这里写图片描述 在说明这种情况之前,我们先了解一下变量的三要素: 红色圈代表:变量名称(如同人名。。) 绿色圈代表:该变量,即名为arr变量自己的地址。该地址存储了arr变量 蓝色圈代表:arr的值,为arr所指对象的地址。 所以一个普通变量arr!=&arr的,arr的值和arr自身的地址是不同的,指针变量就是一个类型为指针的普通变量。

而在上面的运行结果中,我们发现arr==&arr,这说明arr的地址就是arr,arr代表一个地址,arr本身就是一个地址,又根据arr==&arr[0]可知,arr是arr数组首元素的地址,所以arr作为数组名时,它的红圈,绿圈和篮圈代表的是同一个含义——数组首元素的地址。 这是数组名和指针不同的第一点: 数组名取地址得到的是数组名所指元素的地址。 对指针取地址得到的是指针变量自身的地址。

区别2: 数组是固定大小的,数组一经定义,那么数组名就是一个指向数组首元素类型的常量指针,也就是说数组名是不允许更改的,而指针可以更改。 数组名是常量指针,指针是变量指针。

区别3: 1.当对数组名使用sizeof时,得到的是数组元素的个数乘元素类型的字节数,对指针sizeof得到的是指针类型的字节数。 这里写图片描述

2.对数组名取&和对指针取&的意义不同。 这里写图片描述 上图可以看到对arr取地址后加1后,增大了36个字节,而对指针p取地址后加一,只增大了4个字节,所以说它们取地址后加一的能力不同。 这两种情况下,数组不再当成常量指针来使用。 总结: 1.数组名代表了一个指向数组首元素的常量指针,一经定义,不可更改,数组名作为常量指针,其类型与数组元素类型相同。指针是变量指针,定义之后仍可更改,其类型在定义时确定。

2.当出现sizeof,和&操作符时,数组名不再当成指向一个元素的常量指针来使用,而指针仍当成指向一个元素的变量指针来使用。

对于使用指针和数组下标的选择: 系统在使用数组下标对数组成员变量进行访问时,开销比较大,指针的访问效率是远远大于数组名的访问效率的。 但是只有在指针正确访问时,才成比下标法更有效率。 下标法更加容易理解,在可读性方面,也更加的具有优势,具体怎么选择,也没有一定的说法。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有