首页 > 试题广场 >

下面函数的执行结果是输出?

[单选题]
在32位系统上,下面函数的执行结果是输出
char str[] = "xunlei";
char *p = str;
int n = 10;
printf("%d,%d,%d\n", sizeof(str), sizeof(p), sizeof(n));
  • 4,4,4
  • 7,4,4
  • 6,4,4
  • 7,6,4
推荐
答案:选B
sizeof(str),str是字符数组,所以第一个是7个字节
sizeof(p), str的首元素地址赋给指针p,指针总占4个字节
sizeof(n), int型整数,所以4个字节
编辑于 2015-02-04 21:59:30 回复(4)

char str[]="xunlei";
char str2[]={'x','u','n','l','e','i'};
//sizeof(str)计算'\0',sizeof(str2)不计算'\0'

发表于 2017-06-12 14:32:54 回复(3)
字符串数组末尾有'\0',切记切记!
发表于 2015-09-23 18:26:52 回复(0)
选C的原因是混淆了sizeof 和strlen,sizeof会计算占用的内存空间大小,而strlen不会计算\0
发表于 2017-06-27 00:59:18 回复(0)

解析:

  • sizeof(str):数组 str 的大小为 7,因为字符串 "xunlei" 包含 6 个字符(不包括结尾的空字符 '\0'),加上一个结尾的空字符,总共占用 7 个字节。
  • sizeof(p):指针 p 的大小为 4,因为在32位系统中,指针的大小固定为 4 个字节。
  • sizeof(n):整型变量 n 的大小为 4,因为在32位系统中,整型变量的大小通常为 4 个字节。
发表于 2023-10-24 19:17:14 回复(0)
这道题感觉不是太严谨,如果是64位平台呢!指针不就是有8个字节吗?
发表于 2017-04-26 10:56:13 回复(1)
不要忘记了算sizeof(str)时,后面还有'\0',所以长度为7
发表于 2015-08-04 09:22:54 回复(0)
数组名在参数传递才会发生退化为指针情况,所以这里sizeof(str)表示的是数组大小,而不是指针大小~
发表于 2021-06-18 09:02:30 回复(0)
字符串的实际长度比字符串的长度多1,因为还有一个\0
发表于 2017-04-05 14:59:23 回复(0)
这道题注意的是sizeof与strlen的区别,sizeof在计算字符串的时候需要计算换行符,而strlen计算字符串时是不需要计算换行符
发表于 2019-11-15 15:11:06 回复(0)
原来字符串数组末尾有'\0',失策失策
发表于 2017-09-15 23:21:08 回复(0)
我以为64位系统一直以为指针占8字节,哎哟我去,
发表于 2023-08-02 09:48:03 回复(0)
32位 char str[]="xunlei"字符串默认加'\0'7字节 char* 4字节 int 4字节
发表于 2023-04-04 17:50:11 回复(0)
sizeof(数组)计算的是整个数组的大小,又因为字符串str末尾有结束符\0,因此大小为7个字节;
指针p在32位系统中占4个字节
发表于 2022-11-28 19:57:55 回复(0)
发表于 2022-03-27 20:51:48 回复(2)
。。。。。。。
发表于 2020-09-21 19:11:14 回复(0)
<p>字符串中有一个末尾的空字符</p>
发表于 2020-06-13 09:52:01 回复(0)
数组最后一个元素是/0。 指针数据长度有四个字节。 char是一种数据类型。 char *也是一种数据类型。
编辑于 2018-10-29 17:04:35 回复(0)
在Mac64位上运行得到7.8.4
发表于 2016-03-29 11:25:58 回复(1)