3.5.指针的强制类型转换

1.什么是数据类型?数据类型的作用是什么?

int a = 10;

int数据类型规定了变量a的大小的存储方式。数据类型就只有两种作用,内存那么大,如何进行分配使用,都是靠数据类型。

int short char 数据类型的存储方式相同,只是所规定的内存大小不同,而float 和double和他们都不同。

2.指针的数据类型是什么?
准确的来说,指针是没有数据类型的,所有的指针的类型都是指针类型,也就是说,论是int*p,float *p,还是char*p,都是指针类型,而前面的int,float,char是表明该指针指向的变量的数据类型。

分析:

2.1.    int a = 10;
        int * p;
        p = & a;

p是指针类型,p指向一个int类型的变量,也就是说如果p本身的地址是0x11111111,那0x11111111,0x111111120x111111130,x11111114这四个地址存放的是一个int类型的变量,要用int去解析该数据得到一个int类型的变量。

2.2.

        int a = 10float * p = & a;

一个float指针去解析int类型的数据百分之百会出错。类型不同,存储方式不同。

2.3.

        int a[] = {0x11223344};
        char * p = a;
        printf("*p = %d\n",*p);
        printf("*(p+1)\n",*(p+1));
        printf("*(p+2)\n",*(p+2));
        printf("*(p+3)\n",*(p+3)); 

分析: p是数组的首元素的首地址,p 打印的是第一个元素,这时候看数组时int类型的,每一元素占4个字节,而p是char类型的指针,一个字节8位存放两个十六进制的数。也就是说*p只能打印出原来数组的一个字节的内容。(p+1)打印数组第二个字节的内容,(p+2)打印数组第三个字节的内容,(p+3)打印数组第四个字节的内容。也就是说打印四次才能把原来的数组0x11223344四个字节的内容打印出来。

3.总结:所有的指针的解析方式都是相同的,指针的类型只是表明这个指针32位存储了一个地址。该地址上存放了一个变量,该变量是什么类型要根据指针的类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值