gpt4 book ai didi

c - 指向结构体的指针,这还是指向结构体的指针吗?

转载 作者:行者123 更新时间:2023-11-30 19:05:57 24 4
gpt4 key购买 nike

我有一个结构体,里面有变量。现在我需要动态分配内存,所以最初我使用

Struct struct-name *a =Null; 

稍后,我将使用malloc为其分配内存,然后使用

a[0].variableA=allocate , a[0].variableB=allocate.

我的问题是,这是否是一个指向 struct 的指针,因为我没有给出 struct 的地址。而且这种技术有效,它如何知道 struct 的地址。当我没有使用“&”明确给出结构地址时。我知道这可能很愚蠢,但我很困惑。谢谢。

Struct st
{
int a ;
int b;
}
Struct a *ptr=NULL;

在主要

    ptr=malloc(sizeof(struct st)*2);
//Assume array of size 2 is created
Now I can use
ptr[0].a=10;

即使没有明确给出结构地址,我该如何使用。

最佳答案

问题是您不了解 malloc 的工作原理。 (您提到我将使用malloc为其分配内存)

struct struct_name *a = NULL;
a = malloc(sizeof *a);
...

这会计算 struct struct_name 在内存中占用的字节数,然后从 malloc 请求这些字节并将结果(即刚刚使用malloc创建的内存块的起始地址)分配给名为a的指针。这就是整个故事。

现在,您将在确保它没有返回 NULL 后访问它。无需将 & 地址应用于任何 struct struct_name 变量实例。

在您的情况下,ptr 用于访问动态分配的不同结构实例 - 地址在哪里?指向第一个实例的地址包含在ptr中。然后,您使用 ptr[0]ptr[1] 来获取该结构实例。然后您就访问了它。

And yes ptr is a pointer to struct.

还有一件事:-

malloc 可能无法为请求提供服务,它可能会返回空指针。这是很好的检查这一点以防止以后尝试取消引用空指针。如果取消引用 NULL 指针,则这是未定义的行为。

关于c - 指向结构体的指针,这还是指向结构体的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48852497/

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