结构地址到指针数组

时间:2016-01-08 17:52:46

标签: c arrays pointers struct

我正在尝试创建一个指向结构地址的指针数组,这里是代码:

#include <stdio.h>
#include <stdlib.h> 

typedef struct poo {

        int a,b;

} poo;

int main() {


struct poo *adres,poo;

poo.a = 2;

我想知道为什么会这样:

adres = &poo;

printf("%d\n",adres->a);

当我尝试创建一个指针数组时,它不起作用:

 adres = malloc(4*sizeof(*adres));

adres[0] = &poo;

printf("%d\n",adres[0]->a);

错误:

 poo.c: In function ‘main’: poo.c:23:13: error: incompatible types when
 assigning to type ‘struct poo’ from type ‘struct poo *’
     adres[0] = &poo;
              ^ poo.c:25:26: error: invalid type argument of ‘->’ (have ‘struct poo’)
     printf("%d\n",adres[0]->a);
                            ^

3 个答案:

答案 0 :(得分:2)

因为div 不是指针。如果你想复制结构<div class="my_class"><?php code here ?></div> 然后做adres[0],就这么简单。

然后由于poo不是指针,您需要使用正常的结构访问语法,使用点来访问结构中的成员,例如adres[0] = poo

答案 1 :(得分:0)

struct poo *adres是指向struct poo的指针,而不是指向struct poo指针的指针,这是一个指针数组。如果你想要一个指针数组(假设你想要一个包含4个指针的数组),它将是:

struct poo **adres;
adres = malloc(4*sizeof(*adres)); /* this allocates space for 4 pointers */
adres[0] = &poo;

答案 2 :(得分:-1)

adres = malloc(4*sizeof(*adres));

这引起了问题。

这意味着将4*sizeof (struct poo)字节分配为*adres的{​​{1}},然后将该地址分配给struct poo

然后这一行

adres

adres[0] = &poo; 的类型为adres[0],而struct poo的类型为&poo。所以键入不匹配!

要存储struct变量的地址,我们需要一个结构变量指针数组。这可以使用动态内存分配来完成,也可以根据需要静态分配。

  1. 静态内存分配

    struct poo*

    如果事先知道要创建的struct poo *adresArray[4];变量指针的数量,并且想要删除(struct)或在运行时添加指针,请使用此选项。

  2. 动态内存分配

    free

    预先知道要创建的poo **adresArray = malloc(n *sizeof(adres));变量指针的数量以及想要删除时(#{1} })或在运行时添加指针。

  3. 正确的代码是:(动态内存分配)

    struct