我的代码如下。在标有的行上*
,我得到:
error: expected expression before ‘{’ token
rval.adj_list[0] = { {"B","C",3},{"B","A",2} };
是否有一种紧凑的方法来初始化动态分配的指针“双数组”?
struct node;
struct edge {
char *from;
char *to;
int weight;
};
struct digraph {
char **vertices;
struct edge **adj_list;
};
int main( int argc, char *argv[] ) {
struct digraph rval;
int size = 5;
rval.vertices = malloc( size * sizeof(char*));
rval.adj_list = malloc( size * sizeof(struct edge*));
rval.vertices[0] = "A";
rval.adj_list[0] = { {"A","B",2},{"A","E",1} }; //********
rval.vertices[1] = "B";
rval.adj_list[1] = { {"B","C",3},{"B","A",2} }; //********
rval.vertices[2] = "C";
rval.vertices[3] = "D";
rval.vertices[4] = "E";
}
您需要一个C99“复合文字”,它看起来像是强制转换,后跟括号中的初始化程序。
rval.adj_list[0] = (struct edge []){ {"A","B",2},{"A","E",1} };
这导致:
#include <stdlib.h>
struct node;
struct edge {
char *from;
char *to;
int weight;
};
struct digraph {
char **vertices;
struct edge **adj_list;
};
int main(void)
{
struct digraph rval;
int size = 5;
rval.vertices = malloc( size * sizeof(char*));
rval.adj_list = malloc( size * sizeof(struct edge*));
rval.vertices[0] = "A";
rval.adj_list[0] = (struct edge[]){ {"A","B",2}, {"A","E",1} };
rval.vertices[1] = "B";
rval.adj_list[1] = (struct edge[]){ {"B","C",3}, {"B","A",2} };
rval.vertices[2] = "C";
rval.vertices[3] = "D";
rval.vertices[4] = "E";
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句