在c++中,下面的结果正确不?如果不正确,为什么?请高手帮忙分析一下,谢谢!

2024-11-20 21:21:44
推荐回答(6个)
回答1:

(1)完全正确。sizeof操作符返回一个变量、对象或者类型所占的内存字节数。ss在这里是一个字符串指针,指针变量在内存中占四个字节,因此输出4;而*ss表示的是ss变量所指向的字符,即字符串首字符'0',因此在内存中占一个字节,输出1;
(2)部分错误。其中变量ss表示数组,占用的内存大小是15个字节(字符串长度加结尾符'\0'),因此sizeof应该输出15;而*ss跟(1)一样,是对的!
(3)部分错误。这里的ss是一个包含100个字节的数组,因此sizeof输出100是对的;但是strlen表示字符串长度(不包括结尾字符'\0'),因此应该strlen(ss)输出14;
(4)错误。这里的错误是声明出错,因为你声明的是一个整形int数组,而用一个字符型数组来赋值,是不对的!不知道是不是你笔误?如果是char型数组,那么sizeof输出就应该是100,同问题(3)

回答2:

(1)char* ss = "012345678Array";
sizeof(ss) 结果 4 //32Bit 如VC6是对的,16Bit如BC4.5不对结果为2,或4
// near* 或far * 不同内存模式不一样
sizeof(*ss) 结果 1 //对
(2)char ss[] = "012345678Array";
sizeof(ss) 结果 11 //15
sizeof(*ss) 结果 1 //对
(3)char ss[100] = "012345678Array";
sizeof(ss) 结果是100 //对
strlen(ss) 结果是10 //14
(4)int ss[100] = "012345678Array";
sizeof(ss) 结果 400 //kuliuhong的说法应该是正确的,这是一条错误语句。

回答3:

(1)char* ss = "012345678Array";
sizeof(ss) 结果 4:正确,ss是指针,一个指针大小为4字节
sizeof(*ss) 结果 1:正确,*ss是字符数组的第一个元素,即字符0,一个字符大小为1字节

(2)char ss[] = "012345678Array";
sizeof(ss) 结果 11: 错误,ss是一个字符串,字符串默认都是以一个‘\0’非显示字符结尾的,所以整个字符串的大小是(14+1)个字符*1字节=15字节(包括了字符串末尾的'\0'字符)
sizeof(*ss) 结果 1:正确,与(1)同理

(3)char ss[100] = "012345678Array";
sizeof(ss) 结果是100:正确,ss是字符数组,数组在创建时已申请好了内存空间, 大小是100*1 = 100字节
strlen(ss) 结果是10:错误,strlen返回的是数组ss的长度,即14.

(4)int ss[100] = "012345678Array";
sizeof(ss) 结果 400:正确,与(3)同理,数组在创建时已经申请好了内存空间,因为int类型大小为4字节,所以总大小为100*4 = 400字节。

注意:对于不同的机器类型,int类型的长度是不一样的,有的机器上是32位(4字节), 有的机器上是16位(2字节)。而以上解释是按int类型为4字节长度算的。

回答4:

(1)是正确的。
(2)中sizeof(ss)的结果是15,这里sizeof计算的是数组的长度,总共有15个字符(最后一位是‘\0’),数组长度为15
(3)中strlen(ss)的结果是14,这里strlen计算的是字符串长度。
(4)整形数组不能这么定义,这样写是错误的,两个错误:1. “012345678Array”是字符数组,不能用int型数组存储。 2. 定义应该用{1,2,3} 这样才行

回答5:

  • (1)正确

  • (2)数组的sizeof应该是得到它开辟的空间大小,即数组元素个数+1(\0)=15

  • (3)数组的strlen得到的是其元素个数14 

  • (4)字符串不能像这样直接赋值给int型数组

回答6:

1对,2第一个结果为15 3第二个结果为14 第四个定义就不对