c指针的强制转换(cast)

1.类型转化包含两种形式:

    自动隐式转换

    强制显式转换

2.自动隐式转换:

        。低类型会自动向高类型转换:      

char a, b, c;
...
a = b + c;
整型算术运算会自动缺省整型类型精度进行计算,首先对b,c进行提升为int型,计算完在截断为char型。

char a, b;
int c;
double  f, g;
c = a + b;
g = f + c;

计算c时会将a和b转换为int型;

计算g时会将f和c同时转换为float型;

.显示类型转换(只说指针的):

#include <stdio.h>

int main(int argc, char argv[])
{
        int iwoo, *pint;
        char cwoo, *pchar;

        /* the first pintf will print: 0x134513424, and this is a long type
           while the os is  32b */
        printf("pint addr is 0x%x\n", pint);

        printf("int length is %d\n", sizeof(int));
        printf("pchar addr is 0x%x\n", pchar);
        printf("char length is %d\n", sizeof(char));

        /*
         *(int *)0x134513424 = 8;
          if like this, the gcc may show : 
        the integer constang is too large for the 'long' type ;
        *(int *)0x134513424ll = 8;there is no warning, but when you 
        use:./point.o, it will show segmentation fault;
        */
        iwoo = 1025;
        pint = &iwoo;
        printf("var pint pointing is 0x%08x\n", *pint);
        printf("pint addr is 0x%x\n", pint);

        pchar = (char *)pint;
        printf("var0 pchar pointing is 0x%02x\n", *pchar);
        printf("var1 pchar pointing is 0x%02x\n", *(pchar + 1));
        printf("var2 pchar pointing is 0x%02x\n", *(pchar + 2));
        printf("var3 pchar pointing is 0x%02x\n", *(pchar + 3));

	return 0;
}
运行显示:

[wang2@wuhz test]$ ./point.o
pint addr is 0x134513424
int length is 4
pchar addr is 0x10
char length is 1
var pint point is 0x00000401

var pchar point is 0x01
var pchar point is 0x04
var pchar point is 0x00
var pchar point is 0x00
1025十六进制就是0x00000401
输出应该告诉我们:
指针应该是int型的,强制类型转换是告诉编译器应该以何种方式访问指针:*pint就是访问pint地址处
连续的4(sizeof(int))个字节;而*pchar是访问pchar地址处的一(sizeof(char))个字节;...

 
 







    
    



    
    



    
    



    
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值