变量与指针
1.有如下语句int a=10,b=20,*p1=&a,*p2=&b;如果让两个指针变量均指向b,正确的赋值方式是 B 。
A)*p1=*p2; B)p1=p2; C)p1=*p2; D)*p1=p2;
分析:考点为类型的匹配,由于p1、p2都为指针类型,故可赋值。
2.执行以下程序后,a的值为 0 ,b的值为 7 。
int main()
{int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(-*p1)/(*p2)+7;
cout<<a<<b;
return 0;
}
分析:此处的 a=p1==&m;可解释为将逻辑表达式p1==&m的值赋给a。若表达式为真,a就为1,若表达式为假,a就为0。
3.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是 B 。
A)c=*p1+*p2; B)p2=c; C)p1=p2; D)c=*p1*(*p2);
分析:类型不匹配,p2为指针类型,而c为字符类型。
数组与指针
1.下面判断正确的是 C 。
A)char *a="china";等价于char *a;*a="china";
B)char str[10]={"china"};等价于char str[10];str[]="china";
C)char *s="china";等价于char *s;s="china";
D)char c[6]="china",d[6]="china";等价于char c[6]=d[6]="china";
分析:A选项,后面的指针a并没有被赋值,不能直接对其所指对象赋值,而且即使被赋值,此选项中*a就是a[0]只能给它赋值一个字符而不是字符串,但由于a没有被赋值,所以也不能对*a赋值。
B选项,str[]只能是在声明时这么用,其它在其它地方出现[]中必须要有下标。
D选项,前后两种方式存储元素地址不同,属于不同的分配空间里的。
2.设char *s="\ta\017bc";则指针变量s指向的字符串所占的字节数是 C 。
A)9 B)5 C)6 D)7
分析:该字符串所表示的字符分别为'\t'、'a'、'\017'、'b'、'c'、'\0',在编译时,系统默认在字符串最后一个加上'\0'。
3.下面程序段中,for循环的执行次数是 C 。
char *s="\ta\018bc";
for( ;*s!='\0';s++) cout<<"*";
A)9 B)5 C)6 D)7
分析:这个字符串\ta\018bc 其中有两个 转义字符 \t和\01