
一般,我们获取一个变量所占内存空间的方法为:sizeof(变量名或类型名),如:
int a;int aa[10];
int p=aa;
printf("sizeof(int)=%d\n", sizeof(int) ); //现在的机器一般为32位或64位机,int类型占四个字节,所以输出4
printf("sizeof( a )=%d\n", sizeof(a) ); //输出4
printf("sizeof( aa )=%d\n", sizeof(aa) ); //输出410=40
printf("sizeof(p)=%d\n", sizeof(p) );//输出4 ?见下面说明
printf("sizeof(int )=%d\n", sizeof(int ) );//输出4 ?见下面说明
指针变量定义:用来存储内存地址的变量。指针变量中存储的是内存地址数据(一个整型数),而不是真正的数据,真正的数据是在地址中存放的。所以,指针变量实际上就是个整型变量,用sizeof命令去获取任意类型的指针变量都会得到4。
指针变量存储的是一个存储空间的首地址,究竟这个空间有多大,可以存储多少个数据,这是分配空间时所决定的。单独看一个地址值,是看不出其空间大小的。如:
int a;
int aa[10];
int p ; //定义一个指针变量
p=aa ; //指向数组aa,aa的数据空间是40字节,10个整数
p=&a; //指向一个整型变量,它的存储空间是4字节,一个整数
char s="\t\"Name\\Address\n";
\t ,\",N,a,m,e,\\,A,d,d,r,e,s,s,\n
\加上一个字符表示转义字符,算一个,一共15个
对于数组int arr[]={1,2,3,4};可以用len=sizeof(arr)/sizeof(int);得到其大小len。
字符数组(一定是以\0结尾的)除了上面那个方法外,还可以通过指针用循环判断一下
int len=0;
while (p != '\0')
++len;
一般来说,不能用指针去判断数组到底有多少个元素
char p=(char )malloc(10sizeof(char)); 我们知道 是 10。但我们没有简单方法能获得“10”。
通过 calloc, malloc, realloc 分配的空间 (实际消耗的Heap空间) 用 函数
size_t _msize( void memblock ); 可以获得。
获得的字节数,可能大于10。估计原因同 分配结构空间类似,考虑对齐或考虑什么,要多用去一点空间。
#include<stdioh>
#include <malloch>
main(){
char p=(char ) malloc(10sizeof(char));
printf("%d",_msize(p));
}
我的编译器编译运算结果,输出 是 16。
记住32位下的指针 都是4个字节可以简单的这么理解:一个基本的数据类型(包括结构体等自定义类型)加上“”号就构成了一个指针类型的模子。这个模子的大小是一定的,与“”号前面的数据类型无关。“”号前面的数据类型只是说明指针所指向的内存里存储的数据类型。所以,在 32位系统下,不管什么样的指针类型,其大小都为 4byte。
int p;已经告诉编译器,这个指针是指向int类型数据的指针。
malloc取得的指针是不指定类型的,需要强制转换成赋值号左边指针类型才可以不报错地赋值。即malloc返回值是个地址,当作int 来用,无论malloc是否申请了足够一个int占用的字节数。
以上就是关于C语言 如何输出指针所指向空间的大小全部的内容,包括:C语言 如何输出指针所指向空间的大小、c语言中指针所指的字符串怎么算、如何获得指针所指向的数组大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)