关闭

数组是什么类型?

标签: 指针数组内存数组类型指针常量
2608人阅读 评论(2) 收藏 举报
分类:

形如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
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:52378次
    • 积分:1047
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:3篇
    • 译文:0篇
    • 评论:3条
    博客专栏
    最新评论