关于C语言结构体指针做函数形参的问题
#include<stdio.h>#include<string.h>#defineN10typedefstructss{charnum[10];ints;}STU;vo...
#include<stdio.h> #include<string.h> #define N 10 typedef struct ss { char num[10]; int s; }STU; void fun(STU a[],STU *s) { int t,p=0; t=a[0].s; for(int i=1;i<N;i++) { if(t>a[i].s) { t=a[i].s; p=i; } } *s=a[p]; } void main() { STU a[N]={ {"A01",81},{"A02",81},{"A03",81},{"A04",81},{"A05",81}, {"A06",81},{"A07",81},{"A08",61},{"A09",81},{"A010",81} },m; printf("the original data is :\n"); for(int i=0;i<N;i++) { printf("NO=%s MARK=%d\n",a[i].num,a[i].s); } fun(a,&m); printf("the lowest is %s who's score is %d\n",m.num,m.s); } 把fun函数里的最后一行代码*s=a[p];改成s=&a[p];就不行了,感觉差不多,不知道问题出在哪,求教~~~
展开
2个回答
展开全部
fun函数的第二个参数之所以用指针,就是为了能把函数里面对这个参数做的改动保存下来
而你如果把*s=a[p];改成s=&a[p];效果相当于,改了s的值,使其不再指向参数(函数
外部变量
m)的地址,虽然*s的值是正确的,但实际m的值则没有改变,所以在外面输出的时候,结果和预期不一致了
s=&a[p];这个操作本身没有问题
而你如果把*s=a[p];改成s=&a[p];效果相当于,改了s的值,使其不再指向参数(函数
外部变量
m)的地址,虽然*s的值是正确的,但实际m的值则没有改变,所以在外面输出的时候,结果和预期不一致了
s=&a[p];这个操作本身没有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询