C语言笔记-数组地址偏移与指向数组指针偏移的关系
数组地址偏移与指向数组指针偏移的关系
引言:
在学习C语言过程中,使用数组的情况比较多,那么这里简单描述一下比较容易踩坑的数组地址的问题。
一、数组地址偏移与指向数组指针偏移
例如,定义一个数组,如下:
unsigned char Data[3]={1,2,3};
那么有:A、Data或者&Data[0] 都是表示这个数组的起始地址。其关系有:
1.地址关系:&Data[0] = Data 、&Data[1] = Data+1、&Data[2] = Data+2;
2.数值关系:Data[0] = *Data = 1;Data[1] = *(Data+1) = 2 ;Data[2] = *(Data+2) = 3;
B、&Data表示整个数组的起始地址(基地址),其偏移量为整个数组内存大小。
例如:
1.&Data + 1表示起始地址(基地址)整体偏移一个内存,即表示&Data[3]
2.&Data + 2表示起始地址(基地址)整体偏移两个内存,即表示&Data[6]
二、应用
void main(void)
{unsigned char *PA;unsigned char Data[3]={1,2,3};unsigned char B;PA =(unsigned char*)( &Data + 1); //&Data + 1表示起始地址(基地址)整体偏移一个内存,即表示&Data[3],那么PA存放Data[3]的地址B = *(PA -1); //因为PA存放Data[3]的地址, 所以PA-1表示&Data[2],那么*(PA-1)表示Data[2]的值。Printf(“B的值等于%d”,B); // 输出结果为3While(1){}
}
2021.01.11 于深圳龙岗
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
