我在最近6个小时里闲逛,试图解决这个该死的问题。首先,我是一个完整的c编程新手,所以请不要期待我太多... 我需要编写一个programm,它在struct中创建一个Integer Array。所以我写了一个标题并制作了另一个名为" intarray.c"的源文件。除了主要,因为我必须这样做。我包括了所有等等,现在我需要一个函数,它得到一个参数" int n",用于在结构内部创建int数组a [n]。但是我无法解决这个问题。对不起我的不好解释,但我不知道我在这里做了什么。我也尝试过使用指针,但这使我很困惑,我不确定它们是否必要。
我的标题如下:
#ifndef INTARRAY_H_INCLUDED
#define INTARRAY_H_INCLUDED
struct IntArray
{
int length;
int numbers[];
};
void create(int);
void destruct();
void read(int);
void write(int, int);
#endif // INTARRAY_H_INCLUDED
我的功能如下:
create(int n)
{
struct IntArray arr;
arr.length = n;
arr.numbers[n];
}
但现在我无法在其他功能中使用该结构,例如如果我想在特定位置写入数组。我怎么解决这个问题? 并提出愚蠢的问题。
答案 0 :(得分:0)
您需要动态分配内存:
struct IntArray
{
int length;
int * numbers;
};
struct IntArray * create(int len) {
struct IntArray * ret = malloc(sizeof(struct IntArray));
ret->length = len;
ret->numbers = malloc(len * sizeof(int));
return ret;
}
答案 1 :(得分:0)
当您使用灵活数组成员(FAM)时,您需要将结构和数组的内存显式分配为单个分配,如{{3他们的BLUEPIXY。
您还需要编写可编译的代码:
struct IntArray *create(int n)
{
struct IntArray *result = malloc(sizeof(*result) + n * sizeof(result->numbers[0]));
if (result != NULL)
result->length = n;
return result;
}
如果您使用的是64位系统,基本结构的大小可能是8个字节,而不是您通常期望的4个字节,因为指针需要在8字节上对齐边界因此编译器添加了4个字节的填充。在32位系统上,大小为4,因为灵活阵列成员的大小不包含在结构的大小中。