有以下程序: void swap1(int *a,int *b) {int *c=a; s=b,b=c; } void swap2(int *a.int *b) { int c=*a; *a=*b,*b=c;

admin2009-02-15  29

问题 有以下程序:    void swap1(int *a,int *b)    {int *c=a;    s=b,b=c;    }    void swap2(int *a.int *b)    {    int c=*a;    *a=*b,*b=c;    }    main()    {int a=10, b=15;     swap 1(&a,&b) ;     printf("%d,%d,",a,b) ;     a=10,b=15;     swap2(&a,&b) ;     printf("%d,%d",a,b) ;    }    其输出结果为______。

选项 A、15,10,10,15
B、15,10,15,10
C、10,15,10,15
D、10,15,15,10

答案8

解析 C语言规定,实参变量对形参变量的数据传递是“值传递”,只由实参传给形参,而不能由形参传回来给实参。在内函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题中swap1()函数中,虽然改变了形参指针的值,但实参指针的值并没有改变,所以执行第一个printf后应输出10,15,swap2()函数实现了交换两个变量a和b的值,因此执行第二个printf后输出交换后的值15,10,所以本题答案为D。
转载请注明原文地址:https://kaotiyun.com/show/vgXp777K
0

最新回复(0)