为什么我们不能在开头将结构指针定义为null。我总是要在程序中声明一个null指针。
在开始时将它们指向null并不是一件容易的事。为什么它最终会导致一些错误?
struct qwe
{
int data;
struct qwe *next=NULL;
};
或者这样
struct qwe
{
int data;
struct qwe *next;
next=NULL;
};
我正在使用C语言&我这样做时会出错;
verify.c:8:22:错误:预期';'在声明清单的末尾 struct node * next = NULL;
这些是错误
jharvard@appliance (~): make verify
clang -ggdb3 -O0 -std=c99 -Wall -Werror verify.c -lcs50 -lm -o verify
verify.c:9:5: error: type name requires a specifier or qualifier
next=NULL;
verify.c:9:5: error: type specifier missing, defaults to 'int' [-Werror,-Wimplicit-int]
next=NULL;
verify.c:9:5: error: duplicate member 'next'
verify.c:8:18: note: previous declaration is here
struct node *next;
^
verify.c:9:9: error: expected ';' at end of declaration list
next=NULL;
答案 0 :(得分:3)
因为结构只是一个定义内存如何划分的定义。如果你定义
struct a {
uint8_t a1;
uint8_t a2;
}
这将是内存中的16位,如果您访问a2
成员,编译器会将其转换为特定位置。
现在,当您使用malloc()
分配该结构时,malloc只获得它应分配的内存大小。它返回一个指向已分配内存的第一个字节的指针,它不知道这个内存如何分成几个较小的块。
答案 1 :(得分:2)
C没有构造函数的概念。在允许这种情况的语言中,赋值作为对象构造的一部分运行。
答案 2 :(得分:1)
您希望将定义与初始化混合使用,这是您想要的方式,至少在C中是不可能的。为了规避此限制功能,例如< / p>
Foo* foo_new () {
// alloc and
// do your init code here
}
通常使用代替。
在C ++中你可以使用你的类的构造函数。