有以下程序: #include<stdio.h> #include<string.h> typedef stmct stu{ char name[10]; char gender; int score; }STU; void f(char name[10]

admin2021-06-15  10

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

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

答案A

解析 C语言函数参数传递大致分为:
1、值传递过程中,被调函数的形参作为被调函数的局部变量处理,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
2、地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。结构体中name是数组,做实参传递,会退化为指针,因此调用f(),b.name发生修改,其他的成员,传递的是拷贝,不会被修改。因此输出Sun,f,350。故答案为A选项。
转载请注明原文地址:https://kaotiyun.com/show/BAtp777K
0

最新回复(0)