C语言牵涉的概念比较复杂,规范繁多,使用灵活,容易出错,不少初学者感到困难,下面通过几个实例的分析来说明c语言学习中容易混淆的几个问题,以期抛砖引玉,对初学者有所帮助。
问题1:下面的程序
int a=3,b=4;
char str=’c’;
printf(“%d,%d”,a,b,str);
执行后, 输出结果为:
(A)3,4,c (B)3 4 c
(C)3,4 (D)程序出错
分析:在格式输出时一般要求格式说明符与输出项相一致,当输出项多余格式说明符时多余的输出项不输出,所以答案为C。
问题2:有下面的程序段
char a[3],b[]=“china”;
a=b;
printf(“%s”,a);
则输出结果为:
(A)运行后输出china (B)运行后输出ch (C) 运行后输出chi (D)编译出错
分析:这个题容易错选a实际答案为d,由于定义了字符数组后,数组名作为数组的首地址,是一个常量,给一个常量赋值的语句是错误的,换句话说,不能用赋值语句将一个字符常量或字符数组直接赋值给一个字符数组,以答案选D。
问题3:下列说明不正确的是:
(A)char a[10]=“china” (B)char a[10],p=a;p=“china” (C)char p;p=“china”(D)char a[10],p;p=a=“china”;
分析:此题易知A是正确的,D是错误的,对于B、C就很难选择了。有人认为p是一个字符变量,以为把”china”赋给该字符变量是不对的,实际上它是一个指针变量,只能指向一个字符变量或其他字符类型数据,不是把”china”存放到p中(指针变量只存放地址),只是把 “china”的首地址赋给指针变量 p,所以B,C也是正确的。
问题4:下面的程序执行结果是:
main()
{int x[5]={2,4,6,8,10},ppp;
p=x;
pp=&&p;
printf(“%d”,(p++));
printf(“%d\n”,pp);
}
(A)4 4 (B)2 4