我在C ++中测试了这段代码(做了正确的修改,例如printf到std :: cout)并且它有效。但在C中则没有。这是为什么?如果我在typedef struct __POINT中删除了我的x和y的默认值,一切正常。
#include <stdio.h>
#include <stdlib.h>
typedef struct __POINT
{
int x = 0, y = 0;
} Point;
int main()
{
Point *x = malloc(sizeof(Point));
x->x = 5;
x->y = 6;
printf("%i\n%i", x->x, x->y);
getchar();
return 0;
}
答案 0 :(得分:1)
C - 与C ++相反 - 不支持struct
中定义的默认值。所以你的程序根本就不会编译。
如果您要将值初始化为0
,则可以使用calloc
(使用0
初始化内存)来克服此问题:
Point *x = calloc(1,sizeof(Point));
答案 1 :(得分:0)
C struct
成员没有可选的默认值,这种语法错误。唯一的默认值是初始化程序中遗漏0
的特定字段时使用的struct
初始化。
由于您甚至使用malloc
,因此分配的存储空间根本没有初始化。