C. D.
struct student struct student { { int num; int num char name[10]; char name[10] char sex; char sex }; }; student stu1,stu2; struct stu1,stu2;
(7)以下关于共用体的叙述错误的是( )。
A. 在定义共用体变量时可以进行初始化
B. 共用体变量的地址和它的各成员的地址都是同一地址 C. 共用体和结构体在变量的初始化方法相同 D. 共用体可以作为结构体的成员, 参考答案:
(1)D (2)B (3)C (4)C (5)D (6)D (7)C
3.简答题
(1)简述结构体和共用体的区别。 参考答案:
结构体是一种用户自定义的数据类型,结构体成员组合在一起形成一个整体,结构体中的成员可以是不同的类型。
共用体是指多种不同类型的变量从同一地址开始存放,共同占用同一段内存单元。这种含有共用体成员的结构体称为异质结构。共用体也是一种自定义的数据类型,由若干数据成员组成。
虽然共用体与结构体有很多相似之处,但两者还是有本质区别的。在任一时刻,结构体中的所有成员都是可访问的,而共用体中只有一个成员可以访问,其他所有成员都是不可访问的。这种不同反映到存储空间分配上就是结构体变量各成员顺序存放在一段内存中,每个成员分别占有自己的内存单元,结构体变量所占存储空间的大小等于其所有数据成员所占存储空间的总和。而共用体变量的各成员均从同一地址开始存放,共同占用同一存储空间,即各成员所占用的存储空间是相互覆盖的。因此,每个共用体变量所占存储空间的大小等于其所有数据成员中所占存储空间最大者的值,在任一时刻只能从变量的首地址开始保存一个数据成员的值。
4.编程题
(1)定义一个结构体“教师”,其成员包括姓名、性别、年龄、职称和联系电话。 (2)定义一个通讯录结构,成员包括:姓名(字符串)、电话(字符串)、生日。 参考答案:
(1)struct teacher
{ char name[10]; char sex; int age; char zhicheng[10]; char telephone[20];
};
(2)struct information //定义通讯录信息类
{ char name[20]; char telephone[20]; char bathday[20]; };
第6章 指针和引用
1.填空题
(1)若定义int a; 则&a的含义为___________。
(2)若有如下定义,则“&”的含义为___________。
int a; int &b=a;
(3)可以直接赋给指针的唯一正数值是___________。
(4)指针可以进行的运算有___________、___________和___________。 (5)若定义double x; 则:
使指针p可以指向变量x的定义语句是___________。 使指针p指向变量x的赋值语句是___________。
(6)若一个数组中的所有元素的值都是地址,则称该数组为___________。 (7)以下程序段的输出结果为___________。
char s[10]= \char *p=s; p++;
cout<<(strcat(s, \
(8)若有以下定义和语句,则++(*p)的值是___________。
int a[5]={0,1,2,3,4},*p; p=&a[3];
(9)若有以下定义和语句,则*--p的值是___________。
int a[5]={0,1,2,3,4},*p; p=&a[3];
(10)函数change的功能是___________。
void change(char *a) {
int i=0;
for(i=0;i
}
(11)如果正常执行了如下语句:
int m[22],*p1=&m[4],*p2=m+15,x; x=p2-p1;
则x的值为___________。 (12)如果正常执行了如下语句: int d[]={1,2,3,4,5,6,7,8,9,10},*p1=d+8,*p2=&d[3]; p1-=3 cout<<*p1<<'\\t'<<*p2;
则程序的输出为___________。
(13)已知数组x定义为int x[10]; 并能顺利执行语句p1=x; 则p1的声明语句为___________。
(14)已知数组y定义为int y[5]; 并能顺利执行语句p2=&y; 则p2的声明语句为
___________。
(15)运算符_______用于申请所需的内存单元,运算符_______用来释放不需要的内存单元。
(16)将一个变量另起一个别名从而用别名来操作该变量,这个别名叫做该变量的_______。
(17)下面程序的运行结果是___________。
#include
int *p1=&a; int *&p2=p1;
cout<<\}
(18)下面程序的运行结果是___________。
#include
int &x1=x; int y=200; int &y1=y;
cout<<\cout<<\x1+=20; y1/=8;
cout<<\cout<<\}
参考答案:
(1)取变量a的地址 (2)b是变量a的引用 (3)0
(4)赋值运算,算术运算,关系运算 (5)double *p; p=&x; (6)指针数组 (7)abcdABCD (8)4 (9)2
(10)将小写字母转为相应的大写字母 (11)11 (12)6 4 (13)int *p1;
(14)int **p2; (15)new delete (16)引用
(17)a=10,*p1=10,*p2=10 (18)x=100,x1=100 y=200,y1=200 x=120,x1=120 y=25,y1=25
2.选择题
(1)若有以下定义,则变量p所占内存空间的字节数是( )。
float *p; A.1 B. 2 C. 4 D. 8 (2)若有以下定义,则下面说法错误的是( )。
int a=10,*p=&a;
A. 声明变量p,其中“*”表示p是一个指针变量 B. 声明变量p只可以指向一个整型变量 C. 变量p经初始化,获取变量a的地址 D. 变量p的值为10
(3)若有以下定义,则下面均代表地址的一组选项是( )。
int *p,a=10; p=&a;
A. a,p, *& a B. &*a,&a,*p C. &p,*p,&a D. &a,&*p,p
(4)若有说明:int *p1,*p2,m=5,n; 以下均是正确赋值语句的选项为(A. p1=&m;p2=&p1; B. p1=&m;p2=&n;*p1=*p2; C. p1=&m;p2=p1; D. p1=&m;*p1=*p2; (5)若有下列程序段,则下面叙述正确的是( )。
char s[ ]= \char *p; p=s;
A. s与p完全相同
B. 数组s中的内容和指针变量p中的内容相同 C. s数组的长度和p所指向的字符长度相等 D.*p与s[0]相等
(6)若要建立如下的指向关系,错误的语句组是( )。
p15a
A. int *p,a=15;p=&a; B. int a,*p=&a; *p=15;
C. int *p=&a, a; *p=15; D. int *p, a; p=&a;a=15; (7)下列程序的运行结果为( )。
char str[ ]= \
cout<<*(p+2); //将3改为2,才有正确答案!!!!! A. 67 B. 0 C. 字符c的地址 D. c
(8)若有以下定义,则对数组元素的正确引用是( )。
。//拿不准 )