c语言练习题7(指针与结构体,有答案) 下载本文

1、下列程序的运行结果是_B______。 void fun(int *a,int *b) { int *k: k=a;a-b;b=k; } main() {

int a=3,b=6,*x=&a,*y=&b; fun(x,y);

printf[”%d%d.f,a,b); }

A)6 3 B)36 C)编译出错 D)0 0

PS:本题中主函数里的x、y,fun函数里的a、b、k,这些都是指针,fun函数中只是将a、b这两个指针交换了位置,而并没有改变主函数中变量a、b的值。 2、若有定义:int*p[3];,则以下叙述中正确的是____B____。 A)定义了一个基类型为int的指针变量p,该变量有三个指针

B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针

C)定义了一个名为+p的整型数组,该数组含有三个int类型元素

D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素

PS:由于运算符[]优先级比*高,int*p[3];相当于int *(p[3]);表示数组p的三个元素都是指针变量,且每个元素都是基类型为int的指针。 3、有以下程序:

void swapl(int *a,int *b) {int *c=a; a=b,b=c; }

void swap2(int *a,int *b) {

int c=*a: *a=*b,*b=c; } main()

(int a=lO,b=15; swapl(&a,&b);

printf(”%d,%d,”,a,b); a=lO,b=15; swap2(&a,&b);

printf(”%d,%dt.,a,b); }

其输出结果为_10,15,15,10___。

A)15,10,10,15 B)15,10,15,10 C)10,15,10,15 D)10,15,15,10 PS:C语言规定,实参变量对形参变量的数据传递是“值传递”,只由实参传给形参,而不能由形参传回来给实参。在内函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题中swapl()函数中,虽然改变了形参指针的值,但实参指针的值并没有改变,所以执行第一个printf后应输出10,15,;swap2()函数实现了交换两个变量a和b的值,因此执行第二个printf后输出交换后的值15,10,所以本题答案为D。

4、当调用函数时,实参是一个数组名,则向函数传送的是___B_______。 A)数组的长度 B)数组的首地址 C)数组每一个元素的地址 D)数组每个元素中的值

PS:当调用函数时,实参是一个数组名,则向函数传送的是数组的首地址,函数中的形参可定义成以下三种形式: ①形参定义成数组; ②形参定义成可变长数组; ③形参定义为指针变量。

5、设有以下声明语句 struct ex

{ int x;float y;char z;}example; 则下面的叙述中不正确的是_____B_____。

A)struct是结构体类型的关键字 B)example是结构体类型名 C)x,y,z都是结构体成员名 D)struct ex是结构体类型 6、以下只有在使用时才为该类型变量分配内存的存储类说明是____B____。 A)auto和stmic B)auto和register C)register和static D)extem和register

PS:extem、register、static、auto分别是定义外部变量、寄存器变量、静态变量、自动变量,其中,自动变量和寄存器变量属于动态存储,调用时临时分配单元;而静态变量和外部变量属于静态存储,在整个程序运行时都存在。

7、下面程序运行后的输出结果是__C________。 fut(int**s,int p[2][3]) {