首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用C++定义具有可变长度向量的结构

用C++定义具有可变长度向量的结构
EN

Stack Overflow用户
提问于 2021-09-12 07:43:03
回答 1查看 47关注 0票数 0

我需要声明一个具有可变长度向量的结构..

解决方案如下:

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-12 09:17:27

更改struct S以使指针指向double

代码语言:javascript
复制
struct S {
   double  *x;
   double  *y;
   double  z;
};

创建struct S时,首先为要指向的成员创建数组:

代码语言:javascript
复制
double SampleX[] = { 1.,  2.,  3.,  4.  };
double SampleY[] = { 1.1, 2.2, 3.5, 4.0 };

然后定义具有指向该数据的成员的结构:

代码语言:javascript
复制
struct S myS = { .x = SampleX, .y = SampleY, .z = 5.1 };

如果按顺序初始化所有成员,则不需要指定的初始值设定项、.x =等,但它们在此处显示为一个选项。

还添加了一些知道有多少元素的方法。如果它们可以变化,则传递此结构的例程无法知道有多少元素,除非以某种方式向它们提供该信息,例如通过结构中的另一个成员或传递给例程的某个参数。

为要指向的成员创建数组可以通过上面所示的其他方法来完成。您可以使用复合文字:

代码语言:javascript
复制
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在使用完毕后释放内存,尽管在退出程序时通常会省略这一点。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69149429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档