如何将struct数组初始化为null? typedef结构 { 字符*标题; 国际年; int length;//以分钟为单位 }记录; 记录列表[1024]; int j; 对于(j=0;j
,可以在声明时通过以下方式初始化数组:如何将struct数组初始化为null? typedef结构 { 字符*标题; 国际年; int length;//以分钟为单位 }记录; 记录列表[1024]; int j; 对于(j=0;j,c,arrays,pointers,struct,C,Arrays,Pointers,Struct,,可以在声明时通过以下方式初始化数组: typedef struct { char*title; int year; int length; //in minutes } record; record list[1024]; int j; for(j=0;j<1024;++j) list[j]=NULL; 您可以通过以下方式在声明时初始化数组: typedef st
typedef struct
{
char*title;
int year;
int length; //in minutes
} record;
record list[1024];
int j;
for(j=0;j<1024;++j)
list[j]=NULL;
您可以通过以下方式在声明时初始化数组:
typedef struct
{
char*title;
int year;
int length; //in minutes
} record;
record list[1024];
int j;
for(j=0;j<1024;++j)
list[j]=NULL;
您的数组不是指向
record
s的指针数组,而是record
值数组。您不能将数组的元素设置为NULL
,因为它们不是指针。这不是java…您的数组不是指向record
s的指针数组,而是record
值数组。您可以不能将数组的元素设置为NULL
,因为它们不是指针。这不是java…list[1024];
是结构的对象数组,您可以像
record list[1024] = {{0}};
您正在做的是:
list[j].title;
list[j].year;
list[j].length;
list[j]
是类型record
,NULL是void*
。我想这不是你想要的
可以通过单独访问来初始化结构中的单个元素,也可以按照其他人的建议使用
memset
。list[1024];
是结构的对象数组,您可以像
record list[1024] = {{0}};
您正在做的是:
list[j].title;
list[j].year;
list[j].length;
list[j]
是类型record
,NULL是void*
。我想这不是你想要的
可以通过单独访问结构中的单个元素来初始化它们,也可以按照其他人的建议使用
memset
。如果要在for循环中一次执行一个操作,则如下所示
list[j]=NULL
然后,您可以像现在这样将每一个设置为
NULL
,并在准备就绪时对每一个进行malloc操作。如果您希望在for循环中一次执行一个,它将如下所示
list[j]=NULL
然后你可以像你一样将每个都设置为
NULL
,并在准备好的时候对每个设置malloc。我的C有点生锈,但我相信你想要这个:
record * list[1024];
因为sizeof(数组)返回数组中的元素数,而不是数组的字节数。我的C有点生疏,但我相信您希望这样:
record * list[1024];
因为sizeof(数组)返回数组中元素的数量,而不是数组的字节大小。人们通常使用
memset(list,'\0',sizeof(list))你的数组不是指向record
s的指针数组,它是一个record
值数组。你不能将数组中的元素设置为NULL
,因为它们不是指针。这不是java…你说得太对了!非常感谢。我想要的是指针数组而不是struct..谢谢。人们经常使用memset(列表,'\0',大小(列表))
。你的数组不是指向record
s的指针数组,而是record
值数组。你不能将数组的元素设置为NULL
,因为它们不是指针。这不是java…你说得太对了!非常感谢。我想要的是指针数组,而不是struct..谢谢。我如何检查是否有我需要的s此块中没有元素?例如,列表[2]为空,我是否应该使用if(列表[2]==0)?您可以使用title
成员作为哨兵来表示元素尚未初始化:if(列表[2]。title==NULL)
@Robin:当您分配一个包含1024个条目的数组时,所有1024个条目都已分配且存在。您可以使用列表[2]。title==0
(或列表[2]。title==NULL
),但是空间被分配了。@ouah:我没有投反对票,但投反对票的人可能认为你没有真正回答这个问题。没有空结构,除非是按照惯例。一个记录对象,其标题==null
,年份==0
,长度==0
可能是一个有效的记录。我如何检查它k如果此块中没有元素?例如,列表[2]为空,我是否应该使用if(列表[2]==0)?您可以使用title
成员作为哨兵来表示元素尚未初始化:if(列表[2]。title==NULL)
@Robin:当您分配一个包含1024个条目的数组时,所有1024个条目都已分配且存在。您可以使用列表[2]。title==0
(或列表[2]。title==NULL
),但是空间被分配了。@ouah:我没有投反对票,但投反对票的人可能认为你没有真正回答这个问题。没有空结构,除非是按照惯例。一个记录对象,其标题==null
,年份==0
,长度==0
可以是有效的记录。你不需要o将sizeof(list)
乘以sizeof(record)
,因为sizeof(list)
是整个列表的字节大小。这会超出范围,导致崩溃。您不需要将sizeof(list)
乘以sizeof(record)
因为sizeof(list)
是整个列表的字节大小。这可能会超出范围,导致崩溃。您可能应该提到(记录){0,0,0}
是一个C99复合文字,尤其是因为MSVC可能不支持它。是否有充分的理由使用1024*sizeof(记录)
而不仅仅是sizeof(list)
,如果list
的维度从1024变为其他数字,它会自动变为正确的大小?@JonathanLeffler,我想不出一个好的理由不使用sizeof(list)
,这不是我所熟悉的。我会很乐意为列表中的记录定义一个宏,因为如果我的代码中有一个没有名字的数字,我总是感觉很糟糕。然后我会在列表中有记录*sizeof(记录)
我觉得非常可读。如果性能是一个考虑因素,那么一个大的分配比1024个小的分配花费的时间要少。您可能应该提到(