我已经声明了结构
struct wnode {
char *word;
int lines[MAXLINES];
struct wnode *left;
struct wnode *right;
};
Run Code Online (Sandbox Code Playgroud)
和指针
struct wnode *p;
Run Code Online (Sandbox Code Playgroud)
指针被传递给一个函数。在该函数中,我首先使用 malloc 为指针分配内存。然后我想该struct成员初始化线零零出结构体成员行。
数组初始化方法将不起作用,因为它被解释为赋值:
p->lines[MAXLINES] = {0};
Run Code Online (Sandbox Code Playgroud)
编译器抛出错误:
错误:'{' 标记前的预期表达式
最后,我只是使用 for 循环将lines数组清零:
for (i = 0; i < MAXLINES; i++)
p->lines[i] = 0;
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
数组不能直接赋值。您需要使用循环将所有字段设置为 0,或者您可以使用memset:
memset(p->lines, 0, sizeof(p->lines));
Run Code Online (Sandbox Code Playgroud)
请注意,对于非字符类型,您只能这样做以将所有成员设置为 0。对于任何其他值,您需要一个循环。
如果你想使用=运算符,你可以这样做:
struct wnode wn, *p;
/* ........ */
wn = (struct wnode){.word = wn.word, .lines = {0,}, .left = wn.left, .right = wn.right};
*p = (struct wnode){.word = p ->word, .lines = {0,}, .left = p -> left, .right = p -> right};
Run Code Online (Sandbox Code Playgroud)