数组是什么类型?

形如int a[10]的整数数组,a[3]表示的是一个int类型的数值,那么a的类型是什么呢?

对于一个数组来说,数组名是整个数组的首地址,同时也是数组第一个元素a[0]的地址,它是一个指针常量,它的类型取决于数组的类型,如果数组是int型,那么它就是一个指向int型的常量指针,如果数组是char,那么是指向char型的常量指针,注意这是指针常量,不是指针变量,常量的值是不能改变的,不能被赋值。

数组名+整数(如a+3):a是一个指向XX类型的指针,这个3根据数组的类型的长度值来调整,+3的结果是指向另一xx类型的指针,表明它指向的元素是从数组的第一个元素向后面移动3个xx类型长度的位置,也就是指向a[3],等价于&a[3]


但是,指针和数组名不是一回事

int a[10];

int *b;

a和b都可以进行间接访问,以及下标引用操作,但是他们区别很大。

声明一个数组时,编译器会根据声明所指定的元素数量以及类型,为数组保留内存空间。然后再创建数组名,数组名的值是一个常量:指向这段内存空间的首地址

声明一个指针变量时候,编译器为指针变量本身保存内存空间,并不为任何整型变量保留内存空间,区别如下

指针变量如果没有初始化,它指向的地址是随机的,也就是图中?的意思。所以*b是会访问内存中一个不确定的地址。而*a是访问数组第一个元素

同时,a是一个指针常量,b是一个指针变量,可以b++,不可以a++

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值