一、单选题
1、若有说明:int n = 2,*p = &n,*q = p;
则以下非法的赋值语句是(     
A.p = q;
B.p = n;
C.n = *q;
D.*q = 3;
正确答案:B
解析:  B、p为指针类型,即“地址箱”,要保存地址,而n为整型数,类型不匹配。
2、若有以下定义:
‍int x, *pb;
则正确的赋值表达式是(       
A.*pb = *x;
B.pb = x;
C.pb = &x;
D.*pb = &x;
正确答案:C
解析:  A、x是整型变量,普通变量前面加*,这是错误的,没有该语法  D、运行时错误。
正确的是  pb = &x;  x的地址应放到“地址箱”即指针变量pb中,一定要注意“地址箱”即指针变量为pb,而非*pb。
如果写成  *pb = &x;会出现什么问题呢?
pb为随机指向的“野指针”,即随机指向一个空间,该语句试图吧 &x放入到该随机空间中,报
运行时错误
3、若定义: int a =511,*b = &a; printf("%d\n",*b); 的输出结果为(       
A.511
B.无确定值
C.512
D.a的地址
正确答案:A
解析:  A、b是指针变量,保存a的地址,那么*b就是a
4、下面能正确进行字符串赋值操作的是(       
A.char *s;
s ="abcde";
B.char *s;
scanf("%s",s);
C.char s[5] ={'a','b','c','d','e'};
D.char s[5] = {"abcde"};
正确答案:A
解析:  B、编译不报错,运行时错误。
原因s指针随机指向一个空间,即野指针,不能试图把一个字符串输入到该随机空间中,运行时报错  C、语法正确,但数组s中由于缺少字符串结束符'\0',故村的不是字符串,而是5个独立的字符。  D、s数组可容纳5个字符元素,而字符串"abcde"别忘了默认一个'\0',故共6个字符,存不下,语法保存
5、下列语句错误的是(       
A.char a[10] = "china";
B.char a[10],*p;
p = a = "china";
C.char *a;
a = "china";
D.char a[10], *p = a;
p = "china";
正确答案:B
解析:  B、p = a = "china";
为连续赋值语句, 由于赋值号= 的右结合性,先执行把 "china" 赋值给a,这步就有语法错误,因为a是数组名,数组名是常量,不能为其赋值  C、开始指针a为随机指向的“野指针”
后来指向字符串常量“china”,即指向该字符串中的首字符 ‘c’
为正确语法  D、p初始指向a[0],指向完 p = "china"; 后 p指向字符串常量 “china” ,不再指向a[0],为正确语法
6、若已定义  char a[10]; 则在下面表达式中不表示a[1]地址的是(        以下()是不正确的字符串常量
A.&a[1]
B.&a[0]+1
C.a + 1
D.a++
正确答案:D
解析:  D、后缀加 表达式,先取a的值作为表达式的值,为还是a[0]的地址,与题目不符
7、已知main函数中有声明 int a = 3,b = 5; 若在main函数中通过执行函数调用语句swap(&a,
&b);实现交换ab值的功能,则下列swap函数的定义中正确的是(         
A.void swap(int x,int y)
{
    int t;
    t=x;
    x=y;
    y=t;
}
B.void swap(int *x,int *y)
{
    int *p;
    *p = *x;
    *x = *y;
    *y = *p;
}
C.void swap(int *x,int *y)
{
    int *p;
    p=x;
    x=y;
    y=p;
}
D.void swap(int *x,int *y)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。