鱼C论坛

 找回密码
 立即注册
查看: 2744|回复: 8

关于sizeof的题目

[复制链接]
发表于 2013-11-26 14:48:47 | 显示全部楼层 |阅读模式
5鱼币
以下为32位的C++程序,请计算sizeof的值
char str[] = "hello";
char *p = str;
int n= 10;
请计算 sizeof(str)=,sizeof(p)=,sizeof(n)=,

void func(char str[100])
{
     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 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[100])
                {
                    sizeof(str) = ;
                }
           这是一个函数,现在要求的是函数中参数的字节数,因为在函数参数中,
           数组的首元素就当相当于一个指针,所以实际上求的是指针的字节数,
           所以sizeof(str) = 4。
  (5): sizeof(p) = 4
     解析: 因为 void * p = malloc(100);这仅仅是动态分配100个内存而已,
           但是实际上求的依然还是指针所占的字节数,所以 sizeof(p) = 4。

  希望我的答案是你想要的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-26 20:26:29 | 显示全部楼层
楼上讲的很详细
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-26 21:34:09 | 显示全部楼层
sizeof(str)=6;sizeof(p)=4;sizeof(n)=4; 函数中sizeof(str)=4;动态分配内存中sizeof(p)=4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[100])
{
     sizeof(str)=4,
}

void *p = malloc(100);
sizeof(p)=4,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-27 18:24:20 | 显示全部楼层
指针变量在内存中占的字节大小是固定的,尽管所指向的变量类型不同,但是指针变量所占内存空间都是4个字节(32位机器上),而与所指向变量的类型无关,因为它存储的是地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-28 13:37:09 | 显示全部楼层
一个是100 一个是4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-11-29 10:53:17 | 显示全部楼层
3楼解释的很清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 03:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表