选择题
以下选项中,不能对主函数中变量i和j的值进行交换的程序是______。
A、
#include <stdio.h> void swap(int*p,int*q) { int *t; *t=*p; *p=*q; *q=*t; } main() { int i=10,j=20,*a=&i, *b=&j; swap(a,b); printf('i=%d j=%d\n',i,j); }
B、
#include <stdio.h> void swap(int *p,int *q) {int t; t=*p; *p=*q; *q=t; } main() { int i=10,j=20,*a=&i,*b=&j; swap(a,b); printf('i=%d j=%d\n',i,j); }
C、
#include <stdio.h> #include <stdlib.h> void swap(int*p,int*q) {int *t; t=(int*)malloc(sizeof(int)); *t=*p; *p=*q;*q=*t; free(t); } main() { int i=10,j=20; swap(&i,&j);printf('i=%d j=%d\n',i,j); }
D、
#include <stdio.h> void swap( int*p,int*q) { int t; t=*p;*p=*q;*q=t; } main() { int i=10,j=20,*x=&i,*y=&j; swap(x,y); printf('i=%d j=%d\n',i,j); }
【正确答案】
A
【答案解析】
选项A,定义了一个临时指针,实现两个指针地址的交换,而传入了参数是二个指针的副本,即a、b地址的副本,故交换了副本地址,对a、b无影响,故选择A选项。B选项调用函数传入的是i与j地址,函数体内交换是地址内元素,临时变量为整型变量,能实现i与j值交换。C选项调用函数传入的是i与j地址,函数体内交换是地址内元素,临时变量为整型指针,且已正确开辟内存,能实现i与j值交换。D选项与B选项相同,能实现i与i值交换。
提交答案
关闭