读书人

用sizeof计算指针存储空间有关问题

发布时间: 2013-06-25 23:45:41 作者: rapoo

用sizeof计算指针存储空间问题
环境:32位机 VS2008
指针是用来存储地址的,那么他所占用存储空间的大小应该等于数据总线的宽度是吧?
下面一段代码:


//练习代码
#include <stdio.h>
#include <string.h>
#include <malloc.h>

void main(void)
{
char *p1 = NULL;
int *p2 = NULL;
long *p3 = NULL;
float *p4 = NULL;
printf("%d\n",sizeof(*p1) );
printf("%d\n",sizeof(*p2) );
printf("%d\n",sizeof(*p3) );
printf("%d\n",sizeof(*p4) );
}

输出结果是 1 4 4 4 而不是 4 4 4 4
这个怎么解释呢?
[解决办法]
指针是等于4没错
但是你是sizeof(*p),取的是p1指向的空间
所以就是1了,分别是sizeof(char) sizeof(int) sizeof(long) sizeof(float)
[解决办法]
你是sizeof(*p1)是p1所指的值的sizeof。。即等于sizeof(char)。。当然等于1。。
sizeof(p1)的结果才是4。。。
[解决办法]
我想你的本意是求得一个类型的在计算机中保存的长度,以一个int型的变量a来举例,正确用法是sizeof(int)或
sizeof(a);再比如求一个int *型的变量pa(即pa是一个指向整型的指针):sizeof(int *)或者sizeof(pa)
(PS:指针最好初始化后再用,以免引起内存错误)

读书人网 >C++

热点推荐