常用类型(int char double等)
指针访问保存的地址中数据时,会根据指针类型读取相应长度的数据。
例:
int num=129;
char c='1';
int *intp=&c;
printf("*intp=%i\n",*intp);
输出结果:*intp=33073。
分析
内存会先在高位取四个字节存储num
10000001
00000000
00000000
00000000
然后存储c(“1”ascii码值为49),且存储地址在num之前
00110001 c 指针intp指向此处
10000001 从此处开始的4个字节存储num
00000000
00000000
00000000
当访问intp取值时,因为是int型指针,所以会取4个字节
00110001
10000001
00000000
00000000
即为00000000 00000000 10000001 00110001转换为十进制后是33073
指针和数组
当指针指向数组时,可以直接加1依次访问。此时指针加1,地址加的是int型长度(即4个字节)
int num[3]={1,2,3};
int *p=num;
for(int i=0;i<3;i++){
printf("num[%i]=%i\n",i,*(p+i));
}
输出结果:num[0]=1
num[1]=2
num[2]=3