变量类型转换: 1, 不同类型的变量运算时自动转换. 2, 强制类型转换<br />(类型说明符)(表达式); //把表达式的运算结果强制转换成类型说明符所表示的类型.<br />(float)a; //把a转换为实型<br />(int)(x+y); //类型说明符和表达式都必须加括号(单个变量可以不加括号).<br />(无论是强制转换或是自动转换, 都只是为了本次运算的需要而对变量的数据长度进行的临时性转换, 不改变数据说明时对该变量定义的类型)<br />3, 指针类型强制转换: 指针p: <br />(TYPE*)p;<br />这样强制类型转换的结果是一个新指针, 该新指针的类型是TYPE*, 它指向的类型是TYPE, 它指向的地址就是原指针指向的地址.<br />4, 强制转换成指针类型: unsigned int a; TYPE *ptr; a=0x0001; ptr=(TYPE*)a; //把a强制转换成指向TYPE类型的指针. 转换过程中a的值不变, 即(TYPE*)a表示0x0001地址开头的TYPE结构的结构体变量. 所以, ptr指向的地址为0x0001. 这是一种实现对地址直接操作的方法, 但是注意0x0001开始处必须有TYPE结构的变量, 不然会产生内存越界而导致错误. <br />5, 指针强制类型转换: 用新的指针类型来解析原来地址空间中的内容 <br />如<br />struct aaa<br />{<br />char id;char cmd;char byte[4];<br />}aaa1;<br />struct bbb<br />{<br />char id;char cmd;char *ptr;<br />}bbb1;<br />运行到了程序某处, 执行了指针强制类型转换: bbb1=(struct bbb*)aaa1;<br />假定aaa1强制类型转换前的空间的内容是<br />(struct aaa)<br />1byte 1byte 4bytes<br />id cmd byte[4]<br />0x01 0x02 0x03040506<br />强制类型转换之后, 就要以struct bbb来解析该内容<br />bbb1, 一共6bytes<br />1byte 1byte 4bytes<br />id cmd ptr<br />0x01 0x02 0x03040506<br />原来byte[4]的内容成为ptr的内容, 而不是byte[4]的首地址. 即: ptr指向的地址为0x03040506, bbb1->ptr为地址0x03040506处存放的值.<br />
|