有关二级C中的数组的细节~~

来源:百度知道 编辑:UC知道 时间:2024/06/15 03:03:57
有如下两道题,是不是矛盾了?或者说有没有一道题答案错了?

1.已有定义:char a[]="xyz",b[]={'x','y','z'};,下列叙述中正确的是(A)
A)数组a和b的长度相同
B)a数组长度小于b数组长度
C)a数组长度大于b数组长度
D)上述说法都不对

2.对两个数组a和b进行下列初始化:
char m[]="1234567";
char n[]={'1','2','3','4','5','6','7'};
则下列叙述正确的是(C)
A)数组m与数组n完全相同
B)数组m与数组n长度相同
C)数组m比数组n长1
D)数组m与数组n中都存放字符串

1,B
2,C
字符串常量的最后由系统加上一个'\0'。
你可以验证一下
/#include<stdio.h>
int main()
{
char m[]="1234567";
char n[]={'1','2','3','4','5','6','7'};
printf("%d\n",sizeof(m));// 8
printf("%d\n",sizeof(n));// 7
return 0;
}

你说的对,的确有一道题的答案错了。第一题应该选B,不信你可以运行一下,#include<stdio.h>
main()
{

char a[]="xyz",b[]={'x','y','z'};,
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(b));
}这个程序就可以。结果输出 4和3
其实char a[]="xyz",相当于char a[]={"xyz"},对于字符串数组,C语言是这样规定的,系统会自动在字符串的最末尾处添加一个空字符'\0',所以数组a的长度大于数组b的长度。而数组b是一个一个按字符赋予的,b数组只有三个元素,后面没有空字符。
同理第二题选C。这一块教材上说的还算详细,你可以去看看。

1,B
2,C

都应该是C呀 莫名其妙