一维数据与指针

1.一维数组的原理

1.数组名的真正作用:数组整个储存空间的首地址,也代表第0个元素的地址.

(1)找到地址(可以用数组名+偏移量,或者是取地址符完成)

(2)得到空间

由此可总结,两种找到地址和得到空间的方式实际是等价的。

深度挖掘:[]是一种运算符,参考地址[偏移]==*(参考地址+偏移量)。

所以as[3]和[3]as甚至等价,因为本质上都等于*(as+3)。

2.指针与一维数组某元素

(1)int型指针指向int型数组的意义

int*p=a:因为p=&a[0]. 所以p=&*(a+0)。

(2)比较指针p+1和数组名a+1的区别

p++ //p是指针变量

a++ //a是指针(地址)常量,不可被修改。

深度理解:数组名(地址常量)不可改变代表不可以自加,自减。*(a+1)中a并没有改变,可以这样使用。

但是不可以将已经开辟好的内存空间的地址改变。

(3)数组[下标]与*(指针+移动)与指针[下标]的实际应用--遍历数组

3.指针类型的数组(指针数组)

int arr[]={1,2,3,4,5} 这是一个整型数组,其中的元素都是整数。

int * pa[]={ &a , arr , arr+1 , &arr[0] } 这是一个指针类型的数组(指针数组),其中的元素都是指针。

下面的例子可以帮助理解这个概念

指针数组----找到地址 加星号----得到空间

4.指向一维数组的指针(数组指针)

int* x, //指向一个整数的指针 (士兵)

int(*m)[4]; //指向一个一维数组的指针 (百夫长)

int(*n)[3][4]; //指向一个二维数组的指针 (将军)

如何给数组指针赋值:

arr为元素间的偏移,&arr是整体数组的偏移

深刻理解:

首先注意:arr(数组名)只有在sizeof()中和&后才能表示整个数组类型的首地址,其余认作是0号元素的地址

arr:代表数组类型,因为其中有4(n)个int型的元素,所以该类型内存空间为16(4*n)。

*arr(元素):得到数组0号元素的空间,得到了0号元素“1”,且内存空间为4.

&arr(指向数组类型的指针变量):找到整个数组类型的地址,且内存空间为4.

*&arr:代表数组类型,因为其中有4(n)个int型的元素,所以该类型内存空间为16(4*n)。

由此可以更加深刻的理解arr和&arr的关系。

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 19:19
海康威视 结构工程师 18*15 硕士985
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务