指向struct的指针,这甚至是指向struct的指针吗?

时间:2018-02-18 14:01:31

标签: c pointers struct dynamic-memory-allocation memory-address

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

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的地址,我怎么能用呢。

1 个答案:

答案 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指针,则它是未定义的行为。