c指针的强制转换(cast)

来源:互联网 发布:盗墓笔记 鬼吹灯 知乎 编辑:程序博客网 时间:2024/05/17 06:54

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.opint addr is 0x134513424int length is 4pchar addr is 0x10char length is 1var pint point is 0x00000401var pchar point is 0x01var pchar point is 0x04var pchar point is 0x00var pchar point is 0x00
1025十六进制就是0x00000401
输出应该告诉我们:
指针应该是int型的,强制类型转换是告诉编译器应该以何种方式访问指针:*pint就是访问pint地址处
连续的4(sizeof(int))个字节;而*pchar是访问pchar地址处的一(sizeof(char))个字节;...
	
				
		
原创粉丝点击