数组不是指针

很多地方我们常常看到把数组描述为指针,但这其实是不正确的说法。

稍微想一下我们就知道这是两个不同的概念。

数组:表示连续的一些特定类型对象组成的数据结构空间。

指针:通俗的表示一个类型对象地址(地址+类型)

所以这两者怎么看也不是同一个东西!

关键在于,我们对于数组的访问等操作往往是采用指针的方式实现,所以看着像指针。

声明且初始化一个数组  int arr[3]={1,2,3}

那么我们如果要访问数组第0个元素是这样写

int b=arr[0]

[]运算符是数组下标运算符,C标准对其定义:有两个操作数,一个是整型,一个是指针

所以arr好像真是指针?

但C标准又规定了:数组对象,作为表达式大多隐适转换成首元素的指针,用于sizeof和&等一些表达式中除外。

所以这边arr[0]其实是数组arr隐适转换成了首元素指针,并不是arr本身是指针

同样的很多时候我们会打印arr,printf("%p",arr) 输出一个地址值

然后我么判断出arr是地址或者指针,但其实这里也是arr表达式转化成了首元素的指针而已。

当然数组名也不是指针了,数组名就是数组的一个标识符而已。

最后总结 C语言中数组和指针本来就是两种不同的概念,不要试着将其等同,如果这样何必弄出不同的概念,让看的人模糊吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值