请问C语言程序 将下列程序补充完整,练习结构体变量作为函数参数和函数返回值的方法。
#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)这里是怎么错了 展开
#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有没有没关系,数组名在一定情况下可以当指针使用
#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;
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);
return 0;
}
strcpy()函数是包含在"string.h"库函数里的,作用是将逗号右边的字符串赋给逗号右边的。
像你原来那样不用指针直接赋值给fun()函数后,在函数给各个参数赋值是改变不了主函数里的值得,所以要在fun()函数的整型参数带上*号表示是指针,然后再fun()函数里赋值就可以改变主函数里的原值。至于c这个字符串就像上面提过的直接用strcpy()函数拷贝就行了。
希望对你有帮助,哈哈!!加油。。
谢谢了 真厉害
你只要把 fun(&s.a,&s.b,&s.c) 改为 fun(s.a,s.b,s.c) 就行
希望采纳!!!