C语言中关于指针所占空间大小的探讨

示例程序


代码如下

#include <stdio.h>
int main()
{
	 int *na,a=9999999,*nA,A=1,i;//定义两个变量用来控制值比较大和值比较小的时候的内存 

 	 float *nb,b=99999999,*nB,B=1;

	 double *nc,c=999999999,*nC,C=1;

	 char *nd,d=65;

	 na=&a,nA=&A,nb=&b,nB=&B,nc=&c,nC=&C,nd=&d;

	 printf("指针na占用%d字节,nA占用%d字节\n",sizeof(na),sizeof(nA)); 
	 printf("指针nb占用%d字节,nB占用%d字节\n",sizeof(nb),sizeof(nB)); 
	 printf("指针nc占用%d字节,nC占用%d字节\n",sizeof(nc),sizeof(nC)); 
	 printf("指针nd占用%d字节\n",sizeof(nc)); 

	 return 0;
}


通过以上程序编译运行观察结果:
C语言中关于指针所占空间大小的探讨


不难发现,上述的四种指针 无论是字符型整型还是浮点型他们所占用的内存空间大小都是8字节,但是如果更换了操作系统尝试呢?

结果也许会让你耳目一新,是的,更换了操作系统之后,结果也会随之变动,通过查找资料以及实践,我发现,不同的操作系统以及不同的编译器等等环境因素都会让指针类型变量占用的空间大小发生变化:

  • 16位的操作系统指针变量会占用2字节内存空间。
  • 32位的操作系统指针变量会占用4字节内存空间。
  • 64位的操作系统指针变量会占用8字节的内存空间。
    因为我使用的是64位的操作环境以及DEV C++编译器进行实验,所以测试结果为占用8字节的内存
    这样的结果也许没有说服性,可能还存在储存内容大小导致占用空间变化的情况,于是在程序上我又进行改进,加入了更大的值去测试,结果依然是8字节,因此我得出结论,在64位的操作环境下,特定的编译环境下,指针变量占用8字节内存空间
上一篇:Linux下TCP,UDP端口连接确认


下一篇:三合一,fanuc 三菱 兄弟 dnc 上传,下发,删除 NC程序