C语言如何返回结构体数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何返回结构体数组相关的知识,希望对你有一定的参考价值。
定义结构体typedef struct _STR_POINT
float fX;
float fY;
STR_POINT;
现要求函数返回这个结构体的数组,即函数返回多组这个结构体的值。定义一个函数STR_POINT function(),要求函数funciton的返回值是STR_POINT的数组
题设是有问题的
首先你定义了一个结构体_STR_POINT 并且自定义了一个类型STR_POINT
现在你函数的返回值是STR_POINT类型 而你要求返回STR_POINT数组
STR_POINT数组的类型是STR_POINT[]显然预期类型和返回类型不同啊
这是编译器的语法预警
参考技术A 这样写:STR_POINT * f()
{
STR_POINT *p, a[10];
……
p=&a[0];
return(p);
}
将会返回你这个数组的首地址,这样就可以访问这个数组了……本回答被提问者采纳 参考技术B 1、C语言结构体数组的定义:数组是有序的并且具有相同类型的数据的集合。
2、结构数组就是具有相同结构类型的变量集合。假如要用C语言,定义一个班级40个同学的姓名、性别、年龄和住址, 可以做成一个结构数组。
结构数组成员的访问是以数组元素为结构变量的,它的形式为:
1、结构数组元素—成员名。
2、例如:student[0].name,student[30].age
3、实际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是一个结构变量, 第二维是结构成员。
学生情况登记表格编程模式如下:
#include<stdio.h>
struct student
int num;
char name[20];
float score1,score2,sum,average;
;
void main()
struct student stu[5];
int i;
for(i=0;i<5;i++)
printf("请依次输入第%d个学生的学号,姓名,和两门成绩:",i+1);
scanf("%d%s%f%f",&stu[i].num,stu[i].name,&stu[i].score1,&stu[i].score2);
stu[i].sum=stu[i].score1+stu[i].score2;
stu[i].average=stu[i].sum/2;
printf("学号 姓名 成绩 总成绩 平均成绩\n");
for(i=0;i<5;i++)
printf("%d %s %.2f %.2f %.2f
%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].sum,stu[i].average);
C#如何调用C++的DLL的结构体数组指针
C接口
struct PointVec3f//储存XYZ的坐标值.
float xValue;
float yValue;
float zValue;
;
extern "C" __declspec(dllimport) void getPointCloud(PointVec3f *points, int pointNum);
C#定义
public struct PointVec3f
[MarshalAs(UnmanagedType.R4)]
public float xValue;
[MarshalAs(UnmanagedType.R4)]
public float yValue;
[MarshalAs(UnmanagedType.R4)]
public float zValue;
;
PointVec3f[] points =new PointVec3f[NUM]; //points结构体数组的值我已经获取到了,想请问怎么传指针到PointVec3f *points中!Ref的方法试过了,不行!有没有其他方法,急!!
要求:1.写出C#引用接口函数的定义。
2.写出points传值给getPointCloud(PointVec3f *points, int pointNum)的过程。
可以的有分加哦!!
1、添加引用
右击项目-添加引用-浏览 找到本地的dll文件
2、using 该dll文件里面代码的名称空间
然后就可以调用dll文件里面的类(test)和方法(add)了
例如:
using aa.test
namespace conslole1
class Program
static void Main(string[] args)
Test test1=new Test();
test1.add(1, 2);
参考技术B 定义接口
[DllImport("dll文件名", CallingConvention = CallingConvention.Cdecl)]
public static extern void getPointCloud(ref PointVec3f points, int pointNum);
直接调用:
PointVec3f points;
getPointCloud( ref points, num);追问
这是C#调用C++接口,这样行不通的,试了REF传值不行,值不能传送到DLL中的函数中!只能用指针!
本回答被提问者和网友采纳 参考技术C unsafe代码块 就可以使用取地址符号&了以上是关于C语言如何返回结构体数组的主要内容,如果未能解决你的问题,请参考以下文章
在C语言中,怎么样定义结构体数组为全局变量?定义一个无返回值的函数,但是函数有参数可以吗?