我对C中的类型转换有疑问。
所以,我正在使用这些代码行将我的索引值初始化为NULL:
frameTable[i].lv1Index = (int) NULL;
frameTable[i].lv2Index = (int) NULL;
其中frameTable由以下内容构成:
typedef struct {
int lv2Index, lv1Index;
} Frame;
Frame* frameTable;
有谁能告诉我这有什么问题?
这是我的记忆分配:
frameTable = (Frame*) malloc(frameTableSize * sizeof(Frame));
答案 0 :(得分:4)
NULL
是一个表示空指针的宏,而不是整数。你正在做的是最广泛和最痛苦的滥用之一,导致C ++标准化者头痛不已。
如果希望整数为零,请使用八进制0
字面值:
int n = 0;
接下来,您的代码很好,但缺少分配。 frameTable[i]
变量存储在哪里?
您需要以下两种之一:
Frame frameTable[2]; // automatic storage
Frame * frameTable = malloc(sizeof(Frame) * 2); // manual, your responsibility now
答案 1 :(得分:3)
这可能会正确编译和执行,因为您将NULL转换为int(即,编译器假定您知道您正在做什么),但NULL旨在与指针一起使用。由于您的结构字段是整数,只需将它们设置为零即可初始化它们(" frameTable [i] .lv1Index = 0;")。如果您想表明它们还不是有效索引,则将它们设置为-1或其他一些无效值。
答案 2 :(得分:2)
NULL用于指针,而不是int。虽然你可以强制推送几乎任何东西,但你最好更明确,更准确地将它们设置为0。
当你分配你的frameTable时,你也可以通过calloc'ing内存(而不是mallocing)来获得相同的效果。 Calloc将其分配的内存中的所有字节清除为0。
答案 3 :(得分:0)
在c中,除了指针之外,你不能将c对象设置为NULL。您不能将NULL转换为其他对象,因为它不会封装任何内容。因此,您可能希望将struct变量设置为0而不是NULL。