问题 单项选择题

以下4个程序中,不能实现两个实参值进行交换的是 ( )。

A.void swap (float *p, float * { float *t ,a; t = &a; t = p; *p = *q; *q = *t; }void main () { float x = 8.0;y = 9.0; swap (&x, &; cout<<x<<", "<<y<<end1; }

B.void swap (float *p, float * {float a;a = *p; *p = *q; *q = a; } void main() { float x = 8.0;y = 9.0; swap (&x, &; cout<<x<<", "<<y<<end1; }

C.void swap (float *p, float * {float x;x = *p; *p = *q; *q = x; } void main() { float a,; *a = 8.0;*b = 9.0; swap (a, ; cout<<x<<", "<<y<<end1; }

D.void swap (float &p, float & {float a;a = p; p = q; q = a; } void main() {float a = 8.0,b = 9.0;swap (a,;cout<<x<<", "<<y<<end1; }

答案

参考答案:C

解析: 本题考核指针和引用作为函数形参。做此类题时,应学会整体比较,要不然花费的时间不亚于一个大的编程题。 ①首先,这4个程序都是调用swap函数,而且目的都一致,交换传入的两个实参值。 ②分析被调函数swap()。在选项A、B和C中都是指针作为形参,只有在选项D中,函数swap()是以引用作为形参。由指针和引用作为函数形参的特点可知,只要调用了函数,就能达到交换两个实参变量的值,所以这几个被调函数没有问题。 ③再看主函数。在选项C中,没有定义指针类型变量,而是直接给指针变量赋值: “floata,b;*a=8.0;*b=9.0;”,这显然是非法的。想直接开辟存储空间,交换两个常量值,是不可能的。所以只有选项C是错误的。

问答题
单项选择题 A1/A2型题