#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;
}