3 7 指標與強制型別轉換

2021-10-24 15:23:55 字數 643 閱讀 1538

(1)所有的型別的資料儲存在記憶體中,都是按照二進位制格式儲存的。所以記憶體只知道有0和1,不知道是int的,還是float的還是其它型別。

(2)int,char,short等屬於整型,他們的儲存方式(數轉換成二進位制往記憶體中存放的方式)是相同的,只是記憶體格仔大小不同(所以這幾種整型就彼此叫二進位制相容格式);而float和double的儲存方式彼此不同,和整型更不同。

(3)int a = 5;時,編譯器給a分配4位元組空間,並且將5按照int型別的儲存方式轉成二進位制存到a所對應的記憶體空間中去(此時a做左值);我們printf去列印a的時候(a此時做右值),printf內部的vsprintf函式會按照格式化字串(就是printf傳參的第乙個字串引數中的%d之類的東西)所代表的型別去解析a所對應的記憶體空間,解析出的值用來輸出。也就是說,存進去時是按照這個變數本身的資料型別來儲存的(譬如本例中a為int所以按照int格式來儲存);但是取出來時是按照printf中%d之類的格式化字串的格式來提取的。此時雖然a所代表的記憶體空間中的10101序列並沒有變(記憶體是沒被修改的),但是怎麼理解(怎麼把這些1010轉成數字)就不一定了。譬如我們用%d來解析,那麼還是按照int格式解析則值自然還是5;但是如果用%f來解析,則printf就以為a對應的記憶體空間中儲存的是乙個float型別的數,會按照float型別來解析,值自然是很奇怪的乙個數字了。

C 指標型別與強制轉換

指標是乙個特殊資料型別,也可以理解為混合資料型別。指標具有資料型別資訊及資料在記憶體空間的位址。問題分析 c 指標雖然像int型別或是long int型別一樣存放著記憶體位址。但是我們取得的指標位址,不僅僅只有位址值,因為指標型別是一種混合型別。這時我們就需要強制型別轉換。我在qt 5.14版本編譯...

指標強制型別轉換

當我們初始化乙個指標或給乙個指標賦值時,賦值號的左邊是乙個指標,賦值號的右邊是乙個指標表示式。在我們前面所舉的例子中,絕大多數情況下,指標的型別和指標表示式的型別是一樣的,指標所指向的型別和指標表示式所指向的型別是一樣的。例十四 1。float f 12.3 2。float fptr f 3。int...

指標型別強制轉換

問題為下 include void main 輸出為啥不是1呢 這個時候,我們可以看到函式式裡面有格式的轉換,如果格式轉換時存在除void格式外,還有兩個及兩個以上的格式的轉換,則這時候的指標所指的variable所佔的記憶體會產生變化,從而會使格式發生相應的變化 對於本題 當你強行將int指標變為...