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

#include <stdio.h>
#include <string.h>

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)
{strcut STU
S[2]={{"YangSan",20041},{"LiSiGuo",200042}},*p;
p=&s[1];f(p->name,p->num);
printf("%s%d\n",p->name,p->num);
}

麻烦帮我看看哪里有错误???
还有为什么答案说是SunDan 20042???
我觉得S[1]的地址都赋予了P啊。。。为什么只有name被覆盖 num不变?
是因为 num=s[0].num 形式错误么???

/* 

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

*/

#include <stdio.h>

#include <string.h>

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;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-19
#include <stdio.h>
#include <string.h>

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);
}
第2个回答  2011-08-18
p->num 是值传递

p->name 是地址传递
相似回答