我试图制作一个 struct 数组,每个 struct 代表一个天体.

我没有那么多使用 struct 的经验,这就是为什么我决定try 使用它们,而不是一大堆array.然而,我不断地遇到许多不同的错误.我已经try 实现了我在各种线程和StackOverflow(比如Array of structs in CC - initialize array of structs)上看到的技术,但是并不是所有的技术都适用.

对于那些已经阅读了本文的读者,我不需要任何动态信息,我预先知道/定义了所有内容的大小.我还需要它是一个全局数组,因为我在几个不同的方法中访问它,这些方法都定义了参数(即GLUT方法).

以下是我在标题中定义 struct 的方式:

struct body
{
    double p[3];//position
    double v[3];//velocity
    double a[3];//acceleration
    double radius;
    double mass;
};

在定义 struct 内部之前,我有一个正在定义的其他全局变量的列表,其中一个是这个 struct 的数组(基本上,如果我说得太模糊了,下面的一行在上面的内容之上):

struct body bodies[n];

正如您所知,n是我合法定义的东西(即#define n 1).

我以几种不同的方法使用这个数组,但最简单、占用空间最少的一种方法是Main的简化形式.在这里,我初始化每个 struct 中的所有变量,只是为了在以某种方式修改变量之前确定它们:

  int a, b;
 for(a = 0; a < n; a++)
 {
        for(b = 0; b < 3; b++)
        {
            bodies[a].p[b] = 0;
            bodies[a].v[b] = 0;
            bodies[a].a[b] = 0;
        }
        bodies[a].mass = 0;
        bodies[a].radius = 1.0;
 }

我当前面临的错误是nbody.c:32:13: error: array type has incomplete element type,其中第32行是我生成 struct 数组的位置.

最后一点澄清,我所说的标题指的是int main(void)以上的空格,但在相同的*.c文件中.

推荐答案

#include<stdio.h>
#define n 3
struct body
{
    double p[3];//position
    double v[3];//velocity
    double a[3];//acceleration
    double radius;
    double mass;
};

struct body bodies[n];

int main()
{
    int a, b;
     for(a = 0; a < n; a++)
     {
            for(b = 0; b < 3; b++)
            {
                bodies[a].p[b] = 0;
                bodies[a].v[b] = 0;
                bodies[a].a[b] = 0;
            }
            bodies[a].mass = 0;
            bodies[a].radius = 1.0;
     }

    return 0;
}

这个很好用.顺便说一下,您的问题不是很清楚,所以请将源代码的布局与上面的匹配.

C++相关问答推荐

如何确保内存分配在地址附近?

为什么写入系统调用打印的字符数不正确?

有没有更简单的方法从用户那里获取数据类型来计算结果

如何一次获取一个字符

我可以在C中声明不同长度数组的数组而不带变量名吗?

如何在c++中包装返回空*的函数

如何将常量char*复制到char数组

在CLANG中调试预处理器宏

加密解密工作正常,但返回错误0x80090005

为什么我可以在GCC的标签后声明变量,但不能声明Clang?

仅从限制指针参数声明推断非混叠

CS50判断灯泡运动的问题,判断时多出一个灯泡,但不在终端上

如何在c中使用具有不同变量类型的内存分配?

C程序向服务器发送TCPRST

S,在 struct 中创建匿名静态缓冲区的最佳方式是什么?

如何摆脱-WIMPLICIT-Function-声明

RISC-V GCC编译器错误编译ASM代码

指向返回 struct 成员的指针,安全吗?

如何修复数组数据与列标题未对齐的问题?

malloc:损坏的顶部大小无法找出问题