You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

哈希表初始化是否正确?数据结构课程项目技术疑问

关于哈希表指针数组与初始化的问题解答

嘿,我来帮你逐一理清这两个疑问!

1. 你的hash_table是不是指向hash_table_entry的指针数组?

答案是不是。你写的这行代码:

hash_table_entry *hash_table = new hash_table_entry[hash_table_size];

实际创建的是一个**hash_table_entry结构体对象的数组**,hash_table是指向这个数组第一个元素的指针,它的类型是hash_table_entry*——数组里的每个元素都是实实在在的hash_table_entry实例,而不是指针。

而项目要求的“指向hash_table_entry结构体的指针数组”,应该是一个数组,每个元素都是hash_table_entry*类型(即指向结构体的指针)。正确的声明方式是:

hash_table_entry** hash_table = new hash_table_entry*[hash_table_size];

这样hash_table就是标准的指针数组了,接下来你可以把每个元素显式初始化为nullptr(也就是你说的Nil):

for (int i = 0; i < hash_table_size; i++) {
    hash_table[i] = nullptr; // 将指针数组元素初始化为Nil
}

2. 循环创建结构体时,默认变量会自动设为Nil吗?

首先要指出:你当前的循环代码存在类型不匹配的编译错误——hash_table[i]hash_table_entry对象,而new hash_table_entry返回的是hash_table_entry*指针,直接赋值是不允许的,这一步需要先修正。

回到初始化的问题:

  • 如果你用默认初始化(比如new hash_table_entry),结构体里的内置类型成员(char event_idint yearint event_index)不会自动被设置为0或Nil,它们的值是未定义的垃圾值
  • 如果你希望这些成员被初始化为默认值(比如0),需要使用值初始化
    // 两种值初始化方式都可以
    hash_table_entry* entry = new hash_table_entry();
    // 或者
    hash_table_entry* entry = new hash_table_entry{};
    
    这样内置类型成员会被自动零初始化。
  • 对于指针数组的元素(hash_table_entry*类型),默认初始化同样会得到未定义的值,所以必须**显式赋值为nullptr**才能达到“初始化为Nil”的要求。

内容的提问来源于stack exchange,提问作者user10501717

火山引擎 最新活动