指针变量占用多少字节

时间:2024-04-15 16:34:19
指针变量占用多少字节
 
我们讲过,指针变量根据“基类型”的不同,有 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 位,正好能存储下所有内存单元的地址信息。