c语言程序设计练习题集锦,c语言程序设计教案,大学c语言程序设计,、习题讲解,知识点大全,期末试卷
第一章CH8指针
8.1 选择题
1.设有如下定义:
struck sk
{ int a;
float b;
}data;
int *p;
若要使P指向data中的a域,正确的赋值语句是( C )。
A) p=&a;B) p=data.a;C) p=&data.a;D)*p=data.a;
2.语句int *p;说明了 C 。
A)p是指向一维数组的指针
B)p是指向函数的指针,该函数返回一int型数据
C)p是指向int型数据的指针// 指针的定义
D)p是函数名,该函数返回一指向int型数据的指针
3.下列不正确的定义是(A)。
A.int *p=&i,i;
B.int *p,i;
C.int i,*p=&i; D.int i,*p;
选项A先定义一个整型指针变量p,然后将变量i的地址赋给p。然而此时还未定义变量i因此编译器无法获得变量i的地址。(A与C对比,选项C先定义变量i,则在内存中为i 分配空间,因此i在内存空间的地址就可以确定了;然后再定义p,此时可以为p赋i的地址,C正确)
4.若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是: (D)
A)p=q B)*p=*q C)n=*q D)p=n
p,q同为整型指针变量,二者里面仅能存放整型变量的地址。
选项A,q中为地址,因此可将此地址赋给p
选项B,*p表示p所指向对象n的内容,即一个整数;*q表示q所指向对象的内容,由于在定义q时为其初始化,将p中n的地址给q,因此p中存放n的地址,*q表示q所指向对象n的内容.因此*p=*q 相当于n=n;
选项C,n=*q 等价于n=n;
选项D,p中只能存放地址,不能将n中的整数值赋给p
5.有语句:int a[10],;则B是对指针变量p的正确定义和初始化。
A)int p=*a; B)int *p=a; C)int p=&a; D)int *p=&a;
选项A,a是数组名,不是指针变量名,因此不可用*标注数组名a
选项C,a是数组名,数组名就是地址,无需再用地址符号。而且在定义指针变量p时,应在变量名前加*,标明p是指针变量
选项D,a是数组名,数组名就是地址,无需再用地址符号。