Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将struct数组初始化为null? typedef结构 { 字符*标题; 国际年; int length;//以分钟为单位 }记录; 记录列表[1024]; int j; 对于(j=0;j_C_Arrays_Pointers_Struct - Fatal编程技术网

如何将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个小的分配花费的时间要少。您可能应该提到
(