请问C语言程序 将下列程序补充完整,练习结构体变量作为函数参数和函数返回值的方法。

在主函数中定义结构体变量s,并将其成员的初值赋为1、1.0和example_1;在子函数fun()中,将三个成员的值分别改为20、2.0和... 在主函数中定义结构体变量s,并将其成员的初值赋为1、1.0和example_1;在子函数fun()中,将三个成员的值分别改为20、2.0和example_2,再传回到主函数中赋给s。程序的输出为:20, 2.000000, example_2。#include "stdio.h"
#include "string.h"
typedef struct st
{
int a;
float b;
char c[20];
} ST;
void fun(int a,float b,char c[20])
{
a=20;
b=20.0;
c="example2";
}
int main()
{
ST s={10,1.0,"example1"};
fun(&s.a,&s.b,&s.c);
printf("%d, %f, %s\n",s.a,s.b,s.c);
return 0;
}
fun(&s.a,&s.b,&s.c)这里是怎么错了
展开
 我来答
Shadow_Legend
2013-12-03 · TA获得超过205个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:162万
展开全部

#include "stdio.h"

#include "string.h"

typedef struct st

{

    int a;

    float b;

    char c[20];

} ST;

void fun(int *a,float *b,char c[20])    //这里要传递地址,你之前是值传递,函数返回后a 和b 的值没有改变

    *a=20;

    *b=20.0;

//c="example2";     //c是值传递,函数返回后c还是指向“example1"

    strcpy(c,"example2");             

}

int main()

{

    ST s={10,1.0,"example1"};

    fun(&s.a,&s.b,s.c);

    printf("%d, %f, %s\n",s.a,s.b,s.c);

getchar();

getchar();

    return 0;

}

更多追问追答
追问
能告诉我为什么 char  c[20],不用指针吗? 谢谢
追答
用指针也是一样的,char c[20]这个参数在编译时只是读取了这个参数的类型,20有没有没关系,数组名在一定情况下可以当指针使用
帐号已注销
推荐于2016-04-23
知道答主
回答量:15
采纳率:0%
帮助的人:4.1万
展开全部

  #include "stdio.h"

  #include "string.h"

  1.   typedef struct st

  2.   {

  3.              int a;

  4.              float b;

  5.              char c[20];

  6.   } ST;

  7.   void fun(int *a,float *b,char c[20])

  8.   {

  9.             *a=20;

  10.             *b=20.0;

  11.              strcpy(c,"example2");

  12.   }

  13.   int main()

  14.   {

  15.             ST s={10,1.0,"example1"};

  16.             fun(&s.a,&s.b,s.c);

  17.             printf("%d, %f, %s\n",s.a,s.b,s.c);

  18.             return 0;

  19.   }

  20. strcpy()函数是包含在"string.h"库函数里的,作用是将逗号右边的字符串赋给逗号右边的。

  21. 像你原来那样不用指针直接赋值给fun()函数后,在函数给各个参数赋值是改变不了主函数里的值得,所以要在fun()函数的整型参数带上*号表示是指针,然后再fun()函数里赋值就可以改变主函数里的原值。至于c这个字符串就像上面提过的直接用strcpy()函数拷贝就行了。

  22. 希望对你有帮助,哈哈!!加油。。

追问
谢谢了  真厉害
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
会点技术的小子
2013-12-03 · TA获得超过528个赞
知道小有建树答主
回答量:356
采纳率:0%
帮助的人:285万
展开全部
亲,你这里写的是 void fun(int a,float b,char c[20]) fun函数里面要传入的不是地址而是值,

你只要把 fun(&s.a,&s.b,&s.c) 改为 fun(s.a,s.b,s.c) 就行

希望采纳!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d2eb7181f6
2013-12-03 · 超过26用户采纳过TA的回答
知道答主
回答量:73
采纳率:83%
帮助的人:27.9万
展开全部
c="example2";错了,c[20]代表字符数组,c代表地址,不能这样赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hk0304
2013-12-03 · TA获得超过137个赞
知道答主
回答量:242
采纳率:0%
帮助的人:131万
展开全部
&为什么要有它呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式