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))個字節;...