C語言變量類型的深入分析
C語言是強類型語言,定義變量時必須聲明變量的類型,賦值的時候也只能是同種類型變量賦值。
一。變量的類型告訴編譯器怎么處理這個變量的數(shù)據(jù)。
雖然c語言是強類型語言,但是不同類型的變量通過類型轉換也可以賦值,甚至指針變量可以轉化為int類型,轉化為char類型。從本質上來說,變量類型只是告訴編譯器應該怎么處理這個變量,所以不同變量可以通過顯示類型轉換來賦值。理解這點對我們理解指針的轉型非常重要。例如
int a = 10; int **ptr = &a; int b = (int)(*ptr); // *ptr是一個指針,但是通過轉型為int,我們可以將其賦值給b。
如果不明白變量類型的本質,那么會以為第三行代碼是錯誤的。為什么可以這樣賦值呢?(*ptr)是一個指針,可是指針也有值,它的值是一個地址,地址其實就是無符號整數(shù)。所以我們通過類型轉換變成int,這個變量在內存中的數(shù)據(jù)沒有變化,只是對它的解析變化了。如果是作為指針類型,那么數(shù)據(jù)是作為指針來解析;如果作為int型,那么數(shù)據(jù)是作為int來解析。事實上,我們還可以將其賦值給char類型。將其轉型為char,那么對它的解析就是char類型了,只取數(shù)據(jù)的一個字節(jié)解析成char類型,賦值給ch。
char ch = (char)(*ptr); // 有些編譯器會報錯,將其改成(char)(int)(*ptr)就可以修正錯誤了。
二。變量的類型告訴編譯器要分配多少內存空間。
在定義一個變量時,變量類型告訴編譯器要分配多少內存空間來存儲變量。
char ch; // 1B int i; // 4B long l; // 4B float f; // 4B double; // 8B
順便說說,如何理解多級指針。例如int **ptr;
當我們遇到二級指針,三級指針時,總是弄不明白各級指針是什么意思。有一種方法比較容易多級指針,將指針作為數(shù)組來理解。一級指針是一維數(shù)組,二級指針是二維數(shù)組,三級指針是三維數(shù)組,依此類推。當然有些時候不能這么理解,那就要具體問題具體分析了。
int *ptr1; // 一維數(shù)組 int **ptr2; // 二維數(shù)組 int ***ptr3; // 三維數(shù)組
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章
- 04-02c語言函數(shù)調用后清空內存 c語言調用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求階乘


閱讀排行
本欄相關
- 04-02c語言函數(shù)調用后清空內存 c語言調用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求
隨機閱讀
- 01-10C#中split用法實例總結
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法