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、程序注意互动性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)