我需要声明一个具有可变长度向量的结构..
解决方案如下:
#include <stdio.h>
struct S
{
int len;
double *x;
double *y;
double z;
};
int main()
{
double x[] = { 1., 2., 3., 4. };
double y[] = { 1.1, 2.2, 3.5, 4.0 };
//struct S myS = { .len = 4, .x = x, .y = y, .z = 5.1 };
struct S myS = { 4, x, y, 5.1 };
return 0;
}发布于 2021-09-12 09:17:27
更改struct S以使指针指向double
struct S {
double *x;
double *y;
double z;
};创建struct S时,首先为要指向的成员创建数组:
double SampleX[] = { 1., 2., 3., 4. };
double SampleY[] = { 1.1, 2.2, 3.5, 4.0 };然后定义具有指向该数据的成员的结构:
struct S myS = { .x = SampleX, .y = SampleY, .z = 5.1 };如果按顺序初始化所有成员,则不需要指定的初始值设定项、.x =等,但它们在此处显示为一个选项。
还添加了一些知道有多少元素的方法。如果它们可以变化,则传递此结构的例程无法知道有多少元素,除非以某种方式向它们提供该信息,例如通过结构中的另一个成员或传递给例程的某个参数。
为要指向的成员创建数组可以通过上面所示的其他方法来完成。您可以使用复合文字:
struct S myS = {
.x = (double []) { 1., 2., 3., 4. },
.y = (double []) { 1.1, 2.2, 3.5, 4.0 },
.z = 5.1
};或者,您可以使用malloc为数组分配内存。(如果使用malloc,还要使用free在使用完毕后释放内存,尽管在退出程序时通常会省略这一点。)
https://stackoverflow.com/questions/69149429
复制相似问题