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

标签 c arrays

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

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/

相关文章:

java - 从 int 转换为 char 数组。索引不正确?

javascript - 将二维数组中的列添加到另一个二维数组

在 C 中将固定大小的数组更改为动态

c - 使用结构从文件 I/O 读取然后打印的问题

c - 可执行文件在编译机上运行,​​而不是在第二台机器上运行

c - Excel/C - 使用数组获取输入*

arrays - 合并自定义对象数组以形成新对象

android - 如何遍历字符串数组并添加到 Realm 数据库?

C语言: why do i get NULL?

c - 如何在C中找到除法的余数?