有以下程序 #include <stdio.h> typedef struct stu { char name[10]; char gender;

admin2021-02-25  15

问题 有以下程序
#include   <stdio.h>
typedef  struct  stu {
                       char  name[10];
                       char  gender;
                       int  score;
                     } STU;
void  f( STU  a, STU  *b, STU  c )
{  *b = c =a;
   printf( "%s,%c,%d,", b->name, b->gender, b->score );
   printf( "%s,%c,%d,", c.name, c.gender, c.score );
}
main( )
{  STU  a={"Zhao", ’m’, 290}, b={"Qian", ’f’, 350}, c={"Sun", ’m’, 370};
   f( a, &b, c );
   printf( "%s,%c,%d,", b.name, b.gender, b.score );
   printf( "%s,%c,%d\n", c.name, c.gender, c.score );
}
程序运行后的输出结果是

选项 A、Zhao,m,290,Zhao,m,290,Zhao,m,290,Sun,m,370
B、Zhao,m,290,Zhao,m,290,Zhao,m,290,Zhao,m,290
C、Zhao,m,290,Zhao,m,290,Qian,f,350,Sun,m,370
D、Zhao,m,290,Zhao,m,290,Qian,f,350,Zhao,m,290

答案A

解析 C语言函数参数传递分为:1、值传递过程中,被调函数的形参作为被调函数的局部变量处理,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
2、地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
题设中,参数b是地址传递,因此会直接影响实参变量。a,c是值传递,传递是a,c的拷贝,不会a,c实参产生影响,因此,调用函数返回,c没有被修改,b被修改了。故答案为A选项。
转载请注明原文地址:https://kaotiyun.com/show/Intp777K
0

最新回复(0)