char *str_1 = "12345";
char str_2[ ] = "12345";
char str_3[5] = { '1' };
char str_4[5] = { '1', '2', '3', '4', '5' };
表达式 值
sizeof( str_1 ) ___4_____
浅析:sizeof(指针)——求指针大小—— 一般32位机指针大小为4字节
sizeof( *str_1 ) ___1_____
浅析:sizeof(*指针)——求指针所指向的内容的大小——此处*str_1得到一个字符,大小为1字节
strlen( str_1 ) ___5_____
浅析:strlen库函数,求一个以字符'\0'结尾的c字符串长度(不计算'\0'),编译器默认在"12345"字符串后添加结束字符'\0',因此此空得到长度为5
sizeof( str_2 ) ___6_____
浅析:sizeof(数组)——求数组大小——此题str_2数组大小为6!因为编译器会自动在字符串"12345"最后一个字符后添加结束字符'\0',因此存在数组str_2中的实际元素有6个 str_2 == {'1','2','3','4','5','\0'}
strlen( str_2 ) ___5_____
浅析:道理同strlen( str_1 );得到字符串长度为5
sizeof( str_3 ) ___5_____
浅析:sizeof(数组),str_3被定义为大小是5的数组,所以答案为5
strlen( str_3 ) ___1_____
浅析:str_3为一个大小为5的字符数组,用一个字符初始化之,其余元素默认'\0',因此strlen只计算一个字符'1',遇到str_3的第二个元素'\0'后即终止计算,得到结果1
sizeof( str_4 ) ___5_____
浅析:sizeof求数组大小
strlen( str_4 ) _不确定值_
浅析:str_4被定义为大小为5的数组,初始化保存5个字符,因此,此数组无字符串结束符'\0',而库函数strlen在计算时遇到'\0'才停止,我们无法预知内存中那个地方存放了'\0',因此答案无法确定
strlen( *str_1 ) __error___
浅析:strlen要求形参为const char * ,而 *str_1 得到的是一个字符类型 char ,因此错误
有什么问题欢迎大家随时来此讨论交流,共同学习共同进步