能帮忙解释下一下程序吗?

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:00:08
#include<string.h>
struct STU
{char name[10];
int num;};
void f(char *name, int num)
{struct STU s[2]={{"ZHONGLING",124},{“Niuniu",125}};
num=s[0].num;
strcpy(name,s[0].name);
}
void main()
{void main()
{struct STU s[2]={{"Lining",121},{"Luguang",122}},*p;
p=&s[1]; f(p->name,p->num);
printf("%s %d\n",p->name,p->num);
}

输出结果是 Zhongling 122

我实在是看不懂~~~麻烦各位高人教教,谢谢

楼主的程序本身就有问题,我小改了一下。
#include<string.h>
#include <stdio.h>

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

void f(char *name, int num)
{
struct STU s[2]={{"ZHONGLING",124},{"Niuniu",125}};
num=s[0].num;
strcpy(name,s[0].name);
}

int main()
{
struct STU s[2]={{"Lining",121},{"Luguang",122}},*p;
p=&s[1];
f(p->name,p->num);
printf("%s %d\n",p->name,p->num);
return 0;
}
另外,输出结果应该是ZHONGLING 122
原因的话,可以这样来分析,先看下void f(char *name, int num)这个,可以知道num是数值传递,而不是指针传递,也就是说在f函数中对num变量作出的修改在main中并不会出现,而name是指针类型,指向的空间与main函数中的p->name是同一片内存空间,对name修改也就是对p->name修改了。总结起来就是变量的作用域跟指针的问题。