c - 初始化结构而不定义结构成员 - C

标签 c structure

我正在尝试破译某人的代码,但我看到了一些我不明白的东西。当成员未在 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 的定义没有出现在您的代码中,这就是导致编译错误的原因。

另外 - 对于您的具体问题,该代码取消引用未初始化的指针,这会导致未定义的行为。初始化mainconfig结构中的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/

相关文章:

c - 链接 c 项目时体系结构 x86_64 的 undefined symbol

c - 取消引用指针而不将它们指向变量

javascript - Rails 中的 Css 文件分离(变慢)

python - 理想线程结构题(涉及多线程通信)

c++ - C++ 中的结构体和运算符重载

c - 在无限循环中显示相同的字符

c - 如何检查字符串是否包含特定字符?

.net - 为什么 DateTime 是 .Net 中的结构?

c++ - 尝试确定内存是在堆栈还是堆上分配时未发生 Stackoverflow

c++ - 如何为新结构分配内存?