目标
动态创建Element strucs数组的数组(在下面定义)
typedef struct {
void* data;
} Element;
问题
我知道如何malloc一个Element strucs数组
Element* arrayOfElements = malloc(4 * sizeof(Element));
但那么我怎么把Malloc上面的数组? (arrayOfElements数组)
问题2
让我们说arrayOfElements数组被称为arrayOfArrayStruc我将如何继续设置其中的值
例如,我想将65复制到arrayOfArrayStruc 1内的arrayOfElements [2],我将如何得到它?
如果我想将65直接复制到arrayOfElements [2]
,我知道怎么做arrayOfElements[2].data = malloc( sizeof(int) );
ptr = arrayOfElements[2].data;
*ptr = 65;
但是如果arrayOfElements [2]在arrayOfArrayStruc 1中,我不知道怎么做。
修改
为了让我的目标更清晰,我已经制作了一张照片
因此,绿色是由
定义的结构元素typedef struct {
void* data;
} Element;
然后红色(有4个绿色框)是一个元素结构数组,我使用
进行了mallocElement* arrayOfElements = malloc(4 * sizeof(Element));
我要做的是将上面的^^存储在一个数组中,或者创建一个指针数组(这是一个带有红框的蓝框)
所以在图片中“Array Of Element”拥有4个Element Structure,然后我想创建一个数组来存储4个“Element of Element”(或者一个4个指针的数组,指向每个“Element of Element”)< / p>
答案 0 :(得分:1)
arrayOfElements
是指针变量的名称。你不能拥有一系列名字。
你可以有一个指针变量数组。您可以为此编写代码,它与int数组的代码相同,但使用指针类型而不是int。然后,您需要以与现在相同的方式初始化数组中的每个指针变量。
然而,如发布,问题是“数组数组”,而不是“指针数组”。 “数组数组”是一个数组,其中元素类型是数组(不是指针)。
这是一个非动态分配的数组:int x[4][5];
。这是一个包含4个元素的数组,每个元素都是5个整数的数组。
要动态分配其中一个,它与动态分配4个元素的任何数组的代码相同。我们只使用int[5]
作为元素类型,而不是int
或其他任何内容。
指向第一个元素的指针的类型是:“指向int[5]
的指针”。在C语法中,这是写int (*)[5]
- 而不是int *[5]
这是一个指针数组。
编写代码的一种方法是:
int (*px)[5] = malloc(4 * sizeof(int[5]));
希望您可以在问题中看到此与malloc
之间的相似性。我们刚刚将Element
替换为int[5]
。 (所以,你现在的工作就是使用Element[5]
代替int[5]
。或者使用5
代替大小。
为了避免重复(以避免错误的可能性),可以使用常用的习语:
int (*px)[5] = malloc(4 * sizeof *px);
这是4个元素,每个元素都是指针所指向的正确大小。
答案 1 :(得分:1)
如果你想要一个Element *数组,那么你可以做这样的事情,其中n
是指针的数量
Element** arrayOfStructs = malloc( n* sizeof(Element*) );
所以n = 4;你得到一个4指针数组
arrayOfStructs
+---+
| | ->
+---+
| | ->
+---+
| | ->
+---+
| | ->
+---+
现在为arrayOfStructs中的每个条目分配
如果m
是元素的数量
for (int i = 0; i < n; ++i)
{
arrayOfStructs[i] = malloc(m * sizeof(Element));
}
由于每个元素都有一个数据指针,你需要分配指向的内容
for (int i = 0; i < n; ++i)
{
arrayOfStructs[i] = malloc(m * sizeof(Element));
for (int j = 0; j < m; ++j)
{
arrayOfStructs[i][j].data = malloc(sizeof(int));
}
}
在此之后,您将在内存中拥有以下内容
让我们说m = 3;
arrayOfStructs
+---+ +---+---+----+
| | -> | | | | array of Elements
+---+ +---+---+----+ +---+---+----+
| | -------------------> | | | |
+---+ +---+---+----+ +---+---+----+
| | -> | | | |
+---+ +---+---+----+ +---+---+----+
| | -------------------> | | | |
+---+ +---+---+----+
“元素数组”1..3(或更确切地说是0..2)中的每个元素指向不同的“数据”(元素数组下方转动90度左右,因此我可以更轻松地绘制框)< / p>
+---+ +---+
| | -> | | integer
+---+ +---+ +---+
| | ---------> | |
+---+ +---+ +---+
| | -------------------> | |
+---+ +---+