c - 如何用 NULL 初始化结构指针变量?

标签 c

我有这样两个结构

struct table_element
{
    struct table_val * table_val_arr;
    int count_arr;
};

struct hash_table
{
    struct table_element table_element_arr[MAX_NUMBER];
};

这是我的测试方法

void test(struct hash_table * table)
{
    int count;
    struct table_element * tab_element;

    for(count = 0; count < MAX_NUMBER; count++)
    {
        tab_element = &table->table_element_arr[count]; 

        if(tab_element->table_val_arr == NULL)
        {
            printf("\nNULLLL!!!!!\n");
        }
        else
        {
            printf("\nOK!!!!!\n");
        }
    }
}

下面是我如何使用它

int main(int argc, char **argv)
{
    struct hash_table m_hash_table;

    test(&m_hash_table);
...

我希望所有值都是NULL,但有时我会得到OK 有时NULL...

我做错了什么?

如何初始化为NULL?

最佳答案

在函数内部定义的非静态变量如果未明确初始化则具有不确定值,这意味着您不能依赖它们可能包含的任何内容。

您可以通过为变量提供初始值设定项来解决此问题:

struct hash_table m_hash_table = {{NULL, 0},{NULL, 0},/*repeat MAX_NUMBER times*/};

或者使用memset:

memset(&m_hash_table, 0, sizeof(m_hash_table));

关于c - 如何用 NULL 初始化结构指针变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59900970/

相关文章:

C - Malloc 或 calloc ......以及如何?

c - 为什么我的 C 矩阵生成 50x50?

c - 考虑稀疏矩阵获取转置矩阵(可能与排序有关)

从 GUI 但不是从控制台应用程序调用 JNI 时,Java 关闭(崩溃)

c++ - 使用openmp时出现编译错误

c - 在 C/C++ 中 : How can i implement a 2D int array using two single pointers (no use of **int)?

c - 同时使用信号量和互斥体是一个好方法吗?

c - 如果有人正在等待共享信号量,如何检查 C Posix 线程?

c - 在 C99 中初始化包含指向另一个结构的指针的结构

c - fread 无法读取无符号整数? [C]