首页>计算机等级考试>历年真题>正文
2010年9月计算机等级考试真题及答案:二级C模拟

www.zige365.com 2011-12-14 14:20:04 点击:发送给好友 和学友门交流一下 收藏到我的会员中心

(26)答案:(C)解析: 由于()优先级高于*,所以void *fun()说明了一个函数,该函数的返回值是无值型的指针类型,而void(*fun)()说明指针fun指向一个函数,该函数无返回值。

(27)答案:(B) 解析: 本题考查的函数形参与实参的传递规则,当形参与实参都是简单的数据类型时,形参值的改变不能影响实参值的改变,即本题中c的值未改变,仍然是6。

(28)答案:(B) 解析: 本题中,a[1][2]是二维数组中的第6个元素,对应for循环中i的值为5,p[5]=5+1。

(29)答案:(C) 解析: fun()函数的功能是从数组的头尾开始,将第一个元素和最后一个元素对换,将第二个元素和倒数第二个元素对换,直到数组的中间。调用fun函数后,再将对换了元素的数组依次输出。

(30)答案:(B) 解析:函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中去。在本题解析中,我们试图将这一问题解释清楚!

大家可以考虑一下利用下面这函数可不可以实现a和b的互换。

swap(int x, int y)

{ int t;

t=x;

x=y;

y=t;

}

如果在main函数中用swap(a,b),会有什么结果呢?在函数调用开始时,a的值传送给x,b的值传递给y 。执行完swap函数后,x和y的值是互换了,但main函数中的a和b并未互换。也就是说由于“单向传递”的“值传递”方式,形参值的改变无法传递给实参。

为了使在函数中改变了的变量值能被main函数所用,不能采取上述把要改变值的变量作为参数的办法,而应该用指针变量做函数参数。在函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化被保留下来,这样就实现了调用函数改变变量的值,在主调函数中使用这些改变了的值的目的。

swap(int *p1,int*p2)

{ int p;

p=*p1;

*p1=*p2;

*p2=p;

}

注意交换*p1和*p2的值是如何实现的,如果写成下面这样就有问题了!

swap(int *p1,int*p2)

{ int *p;

*p=*p1; /*此语句有问题*/

*p1=*p2;

*p2=*p;

}

*p1就是a,是整型变量。而*p是指针变量p所指向的变量,但p中并无确切地址,用*p可能会造成破坏系统的正常工作状态。应该将*p1的值赋给一个整型变量,用整型变量作为过渡变量实现*p1和*p2的交换。

请注意,不能企图通过改变指针形参的值而使指针实参的值也改变

swap(int *p1,int*p2)

{ int *p;

p=p1;

p1=p2;

p2=p;

}

程序的原意是交换两个指针的值。但是C语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量做函数参数也要遵循这一规则。调用函数不能改变实参指针变量的值,但可以改变实参指针变量所指向变量的值……

(31)答案:(A) 解析: 选项A),局部静态变量的存储空间在程序整个运行期间都不释放,所以比局部动态变量的生存期长。选项B),全局变量说明为静态存储时,作用域不会扩大。选项C),局部静态变量未赋初值时,系统编译时会自动赋初值0或空字符。

本新闻共6页,当前在第3页  1  2  3  4  5  6  

我要投稿 新闻来源: 编辑: 作者:
相关新闻