gpt4 book ai didi

c - *列表和**列表之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:40 24 4
gpt4 key购买 nike

如果我有一个结构:

typedef struct A
{
char c[100];
}A;

然后我创建一个

sizeOfA = 5000;
A *list = (A*) malloc(sizeOfA * sizeof(A));

list[i]指向结构的指针?

或者如果我想要一个指向结构的指针,我应该做什么

A **list = (A**) malloc (sizeOfA * sizeof(A*);

[编辑]

现在假设我使用 A *list 创建了列表(我已经这样做了)。我将如何创建 5000 个指针并使它们指向列表中的元素?

p0 -> list[0]
p1 -> list[1]
..
..
p[n] -> list[n]

来回几次后,我发现对于排序指针有很大帮助。

公平地说,我将把上面的编辑作为一个单独的问题发布。

最佳答案

在这条语句之后:

A *list = (A*) malloc(sizeOfA * sizeof(A));

list 是指向内存块起始位置的指针,该内存块可以容纳 struct A 类型的 sizeOfA 元素。因此,*liststruct A 类型,类似地,list[i]struct A 类型,而不是指向 struct A 的指针(即 list+i)。

如果您希望 list[i] 成为指向 struct A 的指针,那么您的第二段代码将是正确的,因为您正在分配一个有足够空间容纳 sizeOfA 指向 struct A 的内存位置。请注意,您只是分配空间来保存指针,而不是实际的 struct A 实例。尝试读取 list[i]->c 将导致未定义的行为。

关于c - *列表和**列表之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19464082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com