关于sizeof的题目
以下为32位的C++程序,请计算sizeof的值char str[] = "hello";
char *p = str;
int n= 10;
请计算 sizeof(str)=,sizeof(p)=,sizeof(n)=,
void func(char str)
{
sizeof(str)=,
}
void *p = malloc(100);
sizeof(p)=,
因为你说的是在32位的情况下,所以求出的结果为:
(1): sizeof(str) = 6
解析:因为 char str[] = "hello";这是一个用字符数组
来存放字符串的赋值方式,所以在最后会加上'\0'作为结束符,
所以求的是字符数组所占的字节数sizeof(str) = 6。
但是如果求的是strlen(str),结果会为strlen(str) = 5,
因为这时求的是整个字符数组的长度,所以求得strlen(str) = 5。
(2): sizeof(p) = 4
解析: 因为char * p = str,是一个字符指针,指针在计算机中所占的字节数是4。
(3): sizeof(n) = 4
解析: 因为 int n = 10,这时一个整型定义,整型在32位系统中是4个字节,所以 sizeof(n) = 4。
(4): sizeof(str) = 4
解析: 因为 void func(char str)
{
sizeof(str) = ;
}
这是一个函数,现在要求的是函数中参数的字节数,因为在函数参数中,
数组的首元素就当相当于一个指针,所以实际上求的是指针的字节数,
所以sizeof(str) = 4。
(5): sizeof(p) = 4
解析: 因为 void * p = malloc(100);这仅仅是动态分配100个内存而已,
但是实际上求的依然还是指针所占的字节数,所以 sizeof(p) = 4。
希望我的答案是你想要的。 在32位编译器中指针的大小都是4字节,所以sizeof(p)都是为4,数组看大小 sizeof(str)第一个为6,第二个为100,整型的话就要看编译器了。像VC6.0的话sizeof(int)=4,TC2.0的话sizeof(int) =2. 楼上讲的很详细 sizeof(str)=6;sizeof(p)=4;sizeof(n)=4; 函数中sizeof(str)=4;动态分配内存中sizeof(p)=4 如果是32位平台前提:
char str[] = "hello";
char *p = str;
int n= 10;
请计算 sizeof(str)=6,sizeof(p)=4,sizeof(n)=4,
void func(char str)
{
sizeof(str)=4,
}
void *p = malloc(100);
sizeof(p)=4, 指针变量在内存中占的字节大小是固定的,尽管所指向的变量类型不同,但是指针变量所占内存空间都是4个字节(32位机器上),而与所指向变量的类型无关,因为它存储的是地址。
一个是100 一个是4 3楼解释的很清楚
页:
[1]