2018.9.11第二十二次筆記
c語言進階學習筆記1—資料型別
一. 回顧下:之前我們的筆中記錄了資料型別分為兩大類:1.基本資料型別,2.複合資料型別。 1.基本資料型別主要有:int float char double 2.複合資料型別主要有:陣列,結構體,共用體 我們知道當我們定義一個變數的時候,都是要給這個變數一個數據型別的,用來限定這個變數的變化範圍。比如說int a,定義的這個變數被儲存在記憶體中,不同種類的變數型別所佔用的記憶體空間是不一樣的。也就是說一個變數佔用多少空間是由變數的資料型別決定的。 不同的資料型別在不同的CPU中所佔的記憶體是不一樣的。我們不能一概而論,比如說,我們說的int,佔4位元組,32位,就是在32位的CPU中說的。 在編輯器中,我們可以使用sizeof運算子來計算出不同型別的所佔的空間大小。 顯示結果如下:
#include<stdio.h>
int main()
{
int a ;
short b;
char c;
long d;
float e;
double f;
printf("a = %d.\n",sizeof(a));
printf("b = %d.\n",sizeof(b));
printf("c = %d.\n",sizeof(c));
printf("d = %d.\n",sizeof(d));
printf("e = %d.\n",sizeof(e));
printf ("f = %d.\n",sizeof(f));
return 0;
}
顯示結果如下:
二. 回顧下:有符號與無符號數是對於整形數來說的,也就是char short long int都具有有符號數和無符號數。 而float double只有有符號數,沒有無符號數 數的儲存是以二進位制的方式儲存在記憶體中一個個格子中的。對於有符號數和無符號數的儲存方式是不一樣的,這點很重要。這就表示如果我們以整形int存進去,以float取出來就不對了。因為存進去按照int儲存方式,而取出來按照float取出方式。 對於int來說,無符號數uint,32位全部用來儲存數字的內容,所以可以存的資料範圍就是0—2^32-1(10位),而有符號數,最高位規定儲存的是符號,所以實際儲存數只有31位,因此範圍為-2^31—2^31-1。 所以無符號數的範圍比有符號數的範圍大! 舉個例子:
#include<stdio.h>
int main()
{
int a = 5 ;
printf("a = %d a = %f.\n",a,a);
return 0;
}
我定義int,也就是輸入一個int型變數,輸出兩個型別的,一個是匹配型別的int,一個是不匹配的float,結果顯而易見。
三. 原來寫程式碼總是用void,這個void是什麼? 我們總是稱這個void為空,就是不用寫,這種說法不對,這裡的空實際上是型別未知,哪種型別都有可能,只是我現在不知道罷了。 void *是空指標,所指向的那個變數型別為空,編譯器不需要幫我檢查了,我自己知道這樣寫沒錯。 在函式的引數列表中void的含義是呼叫這個函式時不需要給他傳參了。 在返回值return中是void說明這個函式不會返回一個有意義的返回值,所以呼叫者也不用想著去使用該返回值。
四. 不同型別的變數是不能進行運算的。 資料型別轉換有兩種方式:1.隱式轉換,2.強制型別轉換 1.隱式轉換:預設朝著精度更高,範圍更大的方向轉換。 2.強制轉換:程式設計師想這麼做,計算機管不了。