C语言结构体的一道题 struct STU { char name[10]; int num;};

2024-11-27 02:33:52
推荐回答(3个)
回答1:

/* 

作为函数参数传递的值和址是有本质区别的。作为值传送的变量,在被调函数中完全等同于一个初始化了的局部变量,但按址传送的变量(指针或数组),就等同于外部变量。对于函数f()中形参num,改变它的值时,不会不会影响实参的值,也就是不能将其值的改变传回到实参中。下面的代码中,将num按址方式传递,以便达到原有发热目的。

*/

#include 

#include 

struct STU { char name[10]; int num; };

void f(char *name, int *num) {

struct STU s[2] = {{"SunDan",20044},{"Penghua",20045}};

*num = s[0].num;

strcpy(name,s[0].name);

}

int main(void) {

struct STU S[2] = {{"YangSan",20041},{"LiSiGuo",200042}},*p;

p = &S[1];

f(p->name,&p->num);

printf("%s %d\n",p->name,p->num);

return 0;

}

回答2:

#include
#include

struct STU { char name[10]; int num;};
void f(char *name, int *num)
{struct STU
s[2]={{"SunDan",20044},{"Penghua",20045}};
*num=s[0].num;
strcpy(name,s[0].name);
}
main(void)
{struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;
p=&s[1];
f(p->name,&(p->num));
printf("%s %d\n",p->name,p->num);
}

回答3:

p->num 是值传递

p->name 是地址传递