gpt4 book ai didi

c - 尝试初始化结构数组数组时在 ‘{’ 标记之前的预期表达式

转载 作者:太空狗 更新时间:2023-10-29 16:12:41 26 4
gpt4 key购买 nike

我的代码如下。在标有 * 的行上,我得到:

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";
}

关于c - 尝试初始化结构数组数组时在 ‘{’ 标记之前的预期表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21470425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com