我正在尝试制作一个图表,这个程序正处于我的初始阶段 声明了一个结构指针数组,它保存顶点的地址 * vertices [20]是一个数组,其元素都是 struct node * 类型的地址,它将包含图形节点的地址。
#include<stdio.h>
#include<stdlib.h>
struct node {
int data;
struct node *links[10];
};
struct node *create_node(int);
void create_vertices(struct node **);
int main()
{
struct node *vertices[20];
int d, i, choice;
*vertices[0]=(struct node *)malloc(sizeof(struct node)*20);
create_vertices (&vertices);
}
struct node *create_node(int data)
{
int i;
struct node *temp = (struct node *)malloc(sizeof(struct node));
temp->data = data;
for (i = 0; i < 10; i++)
temp->links[i] = NULL;
return temp;
}
void create_vertices (struct node **v)
{
int i,choice;
i=0;
printf("enter choice\n");
scanf("%d", &choice);
while (choice == 1) {
printf("enter data\n");
scanf("%d", &d);
vertices[i] = create_node(d);
i++;
printf("enter choice\n");
scanf("%d", &choice);
}
}
编译上面的代码会给我以下错误
bfs.c: In function ‘main’:
bfs.c:13:21: error: incompatible types when assigning to type ‘struct node’ from type ‘struct node *’
bfs.c:14:9: warning: passing argument 1 of ‘create_vertices’ from incompatible pointer type [enabled by default]
bfs.c:8:6: note: expected ‘struct node **’ but argument is of type ‘struct node * (*)[20]’
bfs.c: In function ‘create_vertices’:
bfs.c:35:16: error: ‘d’ undeclared (first use in this function)
bfs.c:35:16: note: each undeclared identifier is reported only once for each function it appears in
bfs.c:36:3: error: ‘vertices’ undeclared (first use in this function)
程序在下一行中说错误
struct node *vertices[20];
*vertices[0]=(struct node *)malloc(sizeof(struct node)*20);
这种声明的危害是什么? 我声明了一个类型为struct node *的指针数组,我应该给它们提供内存。
答案 0 :(得分:0)
在main中:
create_vertices (&vertices);
应该是:
create_vertices (vertices);
另外:让create_vertices()函数知道数组的大小是更安全的。不应允许i索引超过此大小。
更新:在主要内容删除行:
*vertices[0]=(struct node *)malloc(sizeof(struct node)*20);
Vertices []是自动存储中的20个(未初始化的)指针数组(“在堆栈中”)。
create_vertices()函数将为指针赋值。 (通过调用malloc()并将结果赋值给vertices [i])