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













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章