首页 > 试题广场 >

Review the following c...

[单选题]
下面代码在32位机器上的输出为()
char *str1 = "hello";
short * p1;
int      p2[2];

(1)sizeof(str1) = ___
(2)sizeof(p1) = ___
(3)sizeof(p2) = ___ 
  • (1)6  (2)4  (3)8
  • (1)6  (2)2  (3)4
  • (1)4  (2)4  (3)8
  • (1)5  (2)2  (3)4
在32位机中,所有指针的sizeof大小都是固定4个字节,与指针类型没有关系,所以两个指针的大小都是4字节,(3)是数组的大小,这个就和数组的所含类型的元素个数有关了,两个int型的大小为8字节,所以C正确。
发表于 2020-09-16 17:25:41 回复(0)
str1是一个指向字符串常量的指针,这个str1不能看成数组。数组在编译时会预留数组空间的,但是指针不会预留空间。这里就只是指针(指向字符串常量,这个字符串存放在只读数据段,并不会像数组一样给它再分配空间),要是数组的话就可以用sizeof求大小了。
发表于 2020-08-24 17:32:53 回复(1)
sizeof(str1)实际占用一个地址大小,因为32位机器,所以4字节大小,p2[2]大小实际为2个int大小,8字节
发表于 2020-08-19 20:13:11 回复(0)
sizeof(指针)得到的是指针的大小 sizeof(数组)得到的是数组空间的大小 虽然char p[2]和char* p2,p本质上还是指针,但在这里是不一样的。
发表于 2020-09-13 23:09:01 回复(0)
咋提示我是多选题……就是选了半天没选出来
发表于 2022-02-11 15:18:00 回复(0)
jzx头像 jzx
1和2都是指针变量。指针变量在内存中占4字节
发表于 2021-02-28 21:35:23 回复(0)
好一个不定项单选
发表于 2022-04-05 12:27:10 回复(0)
32位机器即处理机一次能处理的数据位数为32位,而一个指针所占位数为32位,int为32位,故选C
发表于 2022-01-09 17:28:37 回复(0)
数组名的两个特例  &数组名是取得是整个数组的地址   sizeof(数组名)计算的是整个数组的字节大小  其余全是首元素的地址
发表于 2024-01-22 20:35:44 回复(0)
sizeof(str1)指针类型,所以是4个字节,但是题目有问题,const char*不可用于char*的实例化,在程序中第一句直接报错;改为const char* str1="hello";
发表于 2022-05-17 12:19:19 回复(1)
这题咋连个迷惑选项都没有? 直接看第一个是4就确定了
发表于 2021-12-05 21:29:29 回复(0)