1.數據類型
1.1 數據類型:
基本數據類型+複合類型
基本類型:char short int long float double
複合類型:數組 結構體 共用體 (C語言沒有類,C++有)
1.2 內存佔用
數據類型就好像一個一個模子,這個模子刻出來的就是C語言的變量。變量存儲在內存中,就需要佔一定內存。一個變量佔用的空間取決於變量類型。
char 1個字節
short 2個字節
int 4個字節
long 4個字節
float 4個字節
double 8個字節
每種數據類型在不同機器佔不同內存,上面講的是32位默認硬件來描述。
/*
熟悉sizeof使用
*/
#include <stdio.h>
int main(void)
{
int len;
len = sizeof(char);
printf("sizeof(char) = %d. \n", sizeof(char));
len = sizeof(short);
printf("sizeof(short) = %d. \n", sizeof(short));
len = sizeof(char);
printf("sizeof(int) = %d. \n", sizeof(int));
len = sizeof(long);
printf("sizeof(long) = %d. \n", sizeof(long));
}
1.3 有無符號數
對於float和double這種浮點型數來說,只有有符號數,沒有無符號數。
別的基本類型數都有。
有無符號數,存儲方式不同。
譬如對於int來說:
unsigned int 無符號數,32位來存數是0 ~ 2^32-1
signed int 有符號數,最高位表示符號(1是負數,0是正數),31來存數是-2^31 ~ 2^31-1
對於float和double這種浮點類型的數,它的存儲方式是科學計數方式存儲。
//瞭解數據存取必須同類型
#include <stdio.h>
int main(void)
{
int a ;
a = 123;
printf("a = %d, a = %f.\n", a, a);//a = 123, a = -0.032026
return 0;
}
數據存取方式主要有兩種,一種是整形一種是浮點型,這倆各種存取方式完全不同。同一種類型只是範圍不同,存儲原理是相同的,方式上有差異,導致了能表示的範圍和精度不同。
1.4 空類型
C語言中的void類型,代表任意類型,而不是空的意思。任意類型是一種未知的,是沒有指定的。就是暫時沒有指定是一個什麼類型,就void。
一個函數形參列表void,表示不需要(不是不能)給它穿參。
返回值類型爲void,表示不會返回一個有意義的值,所以調用者不要想着使用該值。
#include <stdio.h>
void test(void);
int main()
{
test();
return 0;
}
void test(void)
{
printf("I am a void test.\n");
}
void * 是void類型的指針。這是一個指針變量,該指針指向一個void類型的數。
void類型的數就是說這個數有可能是float,也有可能是結構體,哪種都有可能,只是我當前不知道。
#include <stdio.h>
int main()
{
int a = 444;
void *pVoid;
pVoid = &a;
printf("*pVoid = %d.\n", *(int *)pVoid);//先轉換成int *的方式,然後在取值。
printf("*pVoid = %d.\n", *(float *)pVoid);//錯誤
}
void型的作用,程序不知道那個變量的類型,但是程序員自己心裏清楚。當時給這個變量賦值的是什麼類型,現在取得時候還是什麼類型。這些類型能不能兼容,完全有程序員自己負責,編譯器看到void就放棄檢查。