xxbsky 发表于 2013-11-26 14:48:47

关于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)=,

CL0419 发表于 2013-11-26 14:48:48

因为你说的是在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。

希望我的答案是你想要的。

小亮1201 发表于 2013-11-26 17:17:48

在32位编译器中指针的大小都是4字节,所以sizeof(p)都是为4,数组看大小 sizeof(str)第一个为6,第二个为100,整型的话就要看编译器了。像VC6.0的话sizeof(int)=4,TC2.0的话sizeof(int) =2.

ysm 发表于 2013-11-26 20:26:29

楼上讲的很详细

1988 发表于 2013-11-26 21:34:09

sizeof(str)=6;sizeof(p)=4;sizeof(n)=4; 函数中sizeof(str)=4;动态分配内存中sizeof(p)=4

cyousui 发表于 2013-11-27 11:35:18

如果是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,

maomingkun 发表于 2013-11-27 18:24:20

指针变量在内存中占的字节大小是固定的,尽管所指向的变量类型不同,但是指针变量所占内存空间都是4个字节(32位机器上),而与所指向变量的类型无关,因为它存储的是地址。

markg 发表于 2013-11-28 13:37:09

一个是100 一个是4

xxbsky 发表于 2013-11-29 10:53:17

3楼解释的很清楚
页: [1]
查看完整版本: 关于sizeof的题目