C语言 如何输出指针所指向空间的大小

C语言 如何输出指针所指向空间的大小,第1张

C语言无法输出指针所指向的空间的大小!

一般,我们获取一个变量所占内存空间的方法为: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语言中指针所指的字符串怎么算、如何获得指针所指向的数组大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9810301.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存