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)的过程。
可以的有分加哦!!

参考技术A 调用方法:
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语言如何给结构体指针赋值?

c语言中函数返回值可以是数组、字符串和结构体吗?

在C语言中,怎么样定义结构体数组为全局变量?定义一个无返回值的函数,但是函数有参数可以吗?

C 语言结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

C语言函数中如何返回一个结构体类型

C语言结构体数组排序