(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