c语言中用结构体的实例当做函数的参数是什么形式传入的

c语言中用结构体的实例当做函数的参数是什么形式传入的,第1张

参数的传入分为两种形式:值传递和地址传递。如果把实例本身作为参数传到函数里面去,那么在函数里面实际上是另外产生一个临时的实例,其值和函数外部的那个实例一样,当然在函数内部对其做的一些改动是不会影响到外边的实例的,因为就不是同一个东西。当然如果在函数里不是想去改变什么而只是单纯的计算一些东西还是没问题的,不过在内存中的地址之类的当然是不一样的。。。传指针也就是把地址传进去,那么在函数里对该地址中的数据进行 *** 作,当然就是在外部实例本身上面进行修改了

dll是被使用的

所以 这个自定义结构体 必须是dll自定义的

比如

struct A
{
    int a,b;
};

这样的一个结构体,定义在dll的头文件中

然后 在dll定义一个函数 比如

int getA(struct A a)
{
    return aa+ab;//功能不重要。 随便写点。 
}

在头文件中声明

int getA(struct A a);

在你调用dll的c文件中,引用这个头文件 直接调用getA就好了

传结构体地址与传结构体指针二者都可以作为传出参数,因为接受函数必须为其定义一个结构指针来接收,这样在函数内就可以修改结构体,在这点上二者没有区别。
定义结构体指针未分配地址空间就作为参数传递会,如果你想把它作为传出参数的话,
你必须这么写;
void
get(struct
student
p);
//用p来接收
main()
{
struct
student
a;
get(&a);
}
这样你也能得到你想要的结果。当然你需要在get()函数中用malloc()为其
动态分配内存空间。
你是想知道接收函数的结构体是如何分配的吗?
在接收函数中理论上他会在它自己的函数栈帧复制一份实参结构体拷贝,如果你传的是结构体本身!
这样你对结构体的修改不会对实参有影响。

#include<stdioh>
struct student //结构体在函数外部定义
{
int num;
char Class[20];
char name[40];
float music;
float art;
float math;
};
void in(struct student stu[],int n); //函数声明在函数外部,主函数向子函数传递stu、n,才能在子函数中使用stu、n
void ave(struct student stu); //函数声明在函数外部,求平均数程序整体有些错误,我给改了
void main()
{

struct student stu[100]; //已经定义好的结构体全名是struct +你定义的名字,鉴于内存有限,100的长度已经够用了
int n,i;
printf("输入人数\t"); //增强互动性
while(scanf("%d",&n)!=0)
{
in(stu,n);
for(i=0;i<n;i++)
{
printf("%s ",stu[i]name);
ave(stu[i]);
}
}
}
void in(struct student stu[],int n)
{
int i;
printf("输入信息(学号,班级,姓名,音乐成绩,艺术成绩,数学成绩)\n"); //增强互动性
for(i=0;i<n;i++)
{
scanf("%d %s %s %f %f %f",&stu[i]num,stu[i]Class,stu[i]name,&stu[i]math,&stu[i]music,&stu[i]art);
}
}
void ave(struct student stu)
{
float average;
average=(stumusic+stumath+stuart)/3000;
printf("%5lf\n",average);
}
1、结构体,函数声明都在主函数外;
2、被调函数使用主调函数需要传值;
3、结构体名为struct +定义名;
4、程序注意互动性。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13389313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存