我正在尝试创建一个指向结构地址的指针数组,这里是代码:
#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);
^
答案 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变量的地址,我们需要一个结构变量指针数组。这可以使用动态内存分配来完成,也可以根据需要静态分配。
静态内存分配
struct poo*
如果事先知道要创建的struct poo *adresArray[4];
变量指针的数量,并且不想要删除(struct
)或在运行时添加指针,请使用此选项。
动态内存分配
free
当不预先知道要创建的poo **adresArray = malloc(n *sizeof(adres));
变量指针的数量以及做想要删除时(#{1} })或在运行时添加指针。
正确的代码是:(动态内存分配)
struct