数组是c语言中常用的数据结构,其定义如下:
//声明式定义
int b[10];
b[0] = 1;
printf("%d",b[0]);
//初始化定义
int c[] = {1,2,3};
//内存定义
int *p = (int*)malloc(sizeof(int));
前两种定义都可以同下表直接引用,如b[0],c[1]。但是第三种是数组的动态定义,得到的是数组的指针,也就是数组的地址,那么对该类型如何使用呢?
首先数组的指针,c语言中允许为数组定义指针。数组的指针具有如下性质:
- 指针指向数组的第一个元素的地址
- 指针地址以元素类型的大小累加
- 指针对数组的操作和下表操作完全等价。
int a[10] = {};
定义指针指向数组是需要注意的是,指针指向的是数组的首地址。而数组的名称就表示数组的首地址。
int *p = a;
而&a[0]
也表示数组的首地址,因此也可以使用:
int *p = &a[0];
不能使用
int *p = &a;
这种是基本数据类型指针初始化方法,对数组不适用,因为数组首地址就是数组名称=。
当指针指向数组元素是,使用指针有两种引用方法:
- 地址引用
int a[10] = {};
int *p = a;
a[i] = *(p+i);
//p+i 是下表为i的地址;
- 取值引用
int *p = a;
则 *p = a[0];
//p和a是完全等价的。
a[i] = p[i];
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156116.html