c語言中各資料型別之間的強制轉換

2021-10-12 17:31:26 字數 2765 閱讀 7396

c語言是一門弱型別程式語言,在不越界、並且可讀寫的情況下可以對一段存在記憶體空間的內容進

行任意形式的訪問及修改;

對系統保留的資料型別做轉換:

int

main()

輸出為:a

這種轉換為賦值轉換,僅僅是將乙個變數的值賦予另外乙個型別的變數而已。在c語言中,char\short\int\long\float都可以相互直接賦值,只是資料的完整性在不同型別之間做轉換可能引起資料丟失的情況,這裡就不一一說明;

同樣是對型別的轉換,這裡對記憶體空間的儲存內容做不同形式的訪問

#include

intmain()

;int

*a = b;

printf

("%#x\n"

,*a)

;return0;

}輸出結果為:0x1010000

結果不是想象中的:0x00000101是因為這是多數主機的儲存是小端儲存,

即低位存放於低位址段。如0x12345678,在記憶體中的儲存為78

5634

12。

#include

intmain()

輸出結果為:d,即0x44;

b在記憶體中的儲存為:0x44

0x43

0x42

0x41,將b的位址資訊賦予型別為char

*的a時,

賦予a的意義為,將這塊記憶體區域以儲存0x44為首位址,進行每位元組的訪問,

*a代表的是首個位元組內容,即為0x44對應的ascii字元;

自定義結構體與其他型別的轉換

#include

typedef

struct _testtest;

intmain()

;int

*a =

(int*)

&tt;

printf

("%#x\n"

,*a)

;return0;

}輸出結果為:0x44434241

#include

typedef

struct _testtest;

intmain()

;//int *a = &tt;

char

*a =

(char*)

&tt;

printf

("%s\n"

, a)

;return0;

}輸出結果為:abc

#include

typedef

struct _testtest;

typedef

struct _test1itest;

intmain()

; itest it =

(itest)tt;

return0;

}自定義的不同的結構體型別是無法直接轉換的,即使結構體成員的所有型別都一致;

要順利進行轉換的話可以通過以下方式進行轉換,將:

itest it =

(itest)tt;

替換為:

itest it =

*(itest *

)&tt;

轉換思路為既然無法對變數型別進行型別強轉,那就對變數儲存的記憶體空間的訪問方式進行改變;

*(itest *

)&tt中,首先對tt的記憶體空間做訪問格式的變動,即(itest *

)&tt;

因為it並非指標,需要賦予的是tt儲存空間內對應的內容,

因此使用*

(itest *

)&tt進行解引用訪問;

將乙個long int型的記憶體位址轉換為指標訪問

#include

typedef

struct _testtest;

intmain()

;long

int addr =

&tt;

char

*a =

(char

*)addr;

printf

("%s\n"

, a)

;return0;

}輸出結果為:abc

函式型別強制轉換

#include

#define a 10

typedef

struct _testtest;

typedef

struct _test1itest;

typedef

void

(*print)

(itest *);

void

func

( test *t , test *t1)

void

func1

( itest *it )

intmain()

; print p =

(print *

)&func;

func1

((itest *

)&tt );p

((itest *

)&tt)

;return0;

}輸出結果為:

a65660x556e70cd2260

這個實驗意義不大哈,只是說明即使是函式,依然能夠被強制轉換,

但是丟失的入參是個隨機值或者野指標。

c語言中各資料型別在記憶體中的儲存方式

基本的資料型別有 以32位pc為列。char 1位元組 int 4位元組 long 4位元組 short 2位元組 signed char 1位元組 unsigned char 1位元組 unsigned long 4位元組 unsigned short 2位元組 float 4位元組 double...

C 中資料型別與其他語言中的資料型別之間的對應關係

下表列出了 net framework 提供的一些值型別,簡要描述了每個型別,並指示 visual basic c 和 c 中的相應型別。表中還包括object和string類的項,這些項在許多語言中都有相應的關鍵字。類別 類名 說明 visual basic 資料型別 c 資料型別 c 資料型別 ...

C 中資料型別與其他語言中的資料型別之間的對應關係

昨天除錯了半天的乙個錯誤,是從bmp中把灰度值轉化為高度資訊,是從乙個c 的 往c 中去轉換,cpp 中用了乙個char 的指標來存放位圖資料。我在用c 的時候並沒有過多的考慮,也用了char 結果一直都出錯。搞了乙個小時也沒找到原因。後來查了一下發現居然是型別之間的對應關係有誤。發現這個的原因是湊...