我正在尝试破译某人的代码,但我看到了一些我不明白的东西。当成员未在 header 或代码开头定义但稍后定义时,我没有看到任何有关如何应用结构的引用。这是我试图弄清楚的示例。我注意到 Data_t *data;直到我们输入时髦的函数并且我的编译器在这一行出错时,标题中的内容才被定义。我想我的问题是——这是将数据输入结构的有效方法吗?
非常感谢!
#include <stdio.h>
typedef struct config{
int a;
int b;
int c;
Data_t *data;
} config_t;
int funky(config_t *config);
int main( void )
{
printf("In main()\n");
config_t config;
funky(&config);
printf("a = %d\n", config.a); //accessing config's a member
return 0;
}
int funky(config_t *config)
{
printf("In funky()\n");
Data_t *dataa = config->data;
for(i=0;i<5;i++){
dataa[i].mem1=i;
dataa[i].mem2=4+i;
}
//Set values
config->a = 1;
printf("a = %d\n", config->a); //pointer to config's a member
return 0;
}
最佳答案
Data_t
的定义没有出现在您的代码中,这就是导致编译错误的原因。
另外 - 对于您的具体问题,该代码取消引用未初始化的指针,这会导致未定义的行为。初始化main
中config
结构中的data
字段,否则你会遇到麻烦。该代码块:
Data_t *dataa = config->data;
for(i=0;i<5;i++){
dataa[i].mem1=i;
dataa[i].mem2=4+i;
}
这是坏事 - 正如您所看到的,它复制了未初始化的指针并尝试通过它访问内存。
之后的代码:
//Set values
config->a = 1;
很好,并且是初始化结构的完全合理的方法。
关于c - 初始化结构而不定义结构成员 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4588949/