指针为什么要区分类型

常用类型(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

 

posted @ 2016-01-01 14:10  爱上咖啡的唐  阅读(234)  评论(0编辑  收藏  举报