我有一个结构,它有变量。 现在我需要动态分配内存,所以最初我使用
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;
即使没有明确地给出struct的地址,我怎么能用呢。
答案 0 :(得分:1)
问题是你没有得到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]
来访问该结构实例。然后你访问了它。
是的
ptr
是指向struct的指针。
还有一件事: -
malloc
可能无法为请求提供服务,它可能会返回空指针。这很好
检查这一点以防止以后尝试取消引用空指针。如果取消引用NULL指针,则它是未定义的行为。