指針變量占用多少字節
我們講過,指針變量根據“基類型”的不同,有 int * 型,float * 型,double * 型,char * 型等。
但是我們前面在講數據類型的時候講過,int 型變量占用 4 字節,float型變量占用 4 字節,double類
型變量占用 8字節,char類型占用 1 字節。
那么“指針變量”占多少字節呢?是不是基類型占用多少字節,該變量就占用多少字節呢?同樣,用
sizeof寫一個程序看一下就知道了。
#include<stdio.h>
int main(void)
{
int *a = NULL;
float *b = NULL;
double *c = NULL;
char *d = NULL;
printf("%d %d %d %d\n", sizeof(a), sizeof(b), sizeof(c), sizeof(d));
return 0;
}
運行結果為8 8 8 8
可見,不管什么樣的基類型,系統指針給指針變量分配的內存空間都是8字節,在C語言中,指針變量的“基類型”僅用來指定該指針變量可以指向的變量類型,並沒有其他意思。不管基類型是什么類型的指針變量,他仍然是指針變量,所以仍然占用 8 字節。
那么為什么系統給指針變量分配的是 8 字節呢?兄弟都9102年了,還在使用32位系統?當然是64位系統啦,64位計算機有64根地址線,每根地址線要么是 0 要么是 1,只有兩種狀態。內存單元中的每個地址都是由着 64根地址線通過不同的狀態組合而成的,而 8 字節剛好 64 位,正好能存儲下所有內存單元的地址信息。