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

admin2013-05-30  31

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

选项 A、void swap (float *p, float *q)          {             float *t ,a;     t = &a;             t = p;  *p =  *q;  *q = *t;          }       void main ()          {              float x = 8.0;y = 9.0;              swap (&x, &y);              cout<<x<<", "<<y<<
B、void swap (float *p, float *q)            {               float a;               a = *p;  *p = *q;  *q = a;            }            void main()            {            float x = 8.0;y = 9.0;            swap (&x, &y);            cout<<x<<", "<<y<<end1;   
C、void swap (float *p, float *q)             {                float x;                x = *p;  *p = *q;  *q = x;             }             void main()             {             float a,b.;             *a = 8.0;*b = 9.0;             swap (a, b) ;            
D、void swap (float &p, float &q)             {                float a;                a = p; p = q; q = a;             }             void main()             {                float a = 8.0,b = 9.0;                swap (a,b);                cout<<x<<", "<<y<<

答案4

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

最新回复(0)