关于结构体数组的初始化

时间:2021-02-12 19:49:57
typedef struct prop_data
{
    INT8 *key;
    INT8 *value;
}prop_data;
prop_data properties[KEYS_MAX];

请问这个结构体数组初始化怎么弄?我是用来保存键值对的。。。
memset(properties,0,sizeof(properties)*KEYS_MAX)  OK么?

12 个解决方案

#1


你这样是吧struct的指针成员都赋值为地址为0,无法使用

#2


引用 1 楼 bdmh 的回复:
你这样是吧struct的指针成员都赋值为地址为0,无法使用

神玛意思啊楼上,不行吗,可以吧

#3


lz的做法有问题
memset(properties,0,sizeof(properties));//就够了不需要*KEYS_MAX
否则的话就这么写:
memset(properties,0,sizeof(prop_data)*KEYS_MAX);

#4


全局变量,默认就全初始化为0了。
局部的,你那个可以

#5


引用 4 楼 luciferisnotsatan 的回复:
全局变量,默认就全初始化为0了。
局部的,你那个可以

看错了
sizeof(properties)出来就是数组大小了

#6


引用 1 楼 bdmh 的回复:
你这样是吧struct的指针成员都赋值为地址为0,无法使用

memset(properties,&0,sizeof(properties)*KEYS_MAX);
如果是因为结构体内元素是指针的话,是不是这样改? 好奇怪,取常数的地址。。。。。。

#7


prop_data properties[KEYS_MAX] = {};
即可

#8


引用 7 楼 leaveye 的回复:
C/C++ code
prop_data properties[KEYS_MAX] = {};
即可


我开始写的是
prop_data properties[KEYS_MAX] = {0};
被老大给打回来了,说是不合格,这样有什么不好的影响么?求详解!

#9


来学习的

#10


刚看到一个帖子
http://topic.csdn.net/u/20100709/12/55737840-7a5e-4a1c-81ae-d256ba17409f.html
1. 结构体中不要放置类。
2. sizeof对于包含指针的结构获得的长度不是你想要的。

有木有牛叉人士详解一把?

#11


1. 关于使用 ={} 初始化。

这种语法指定某复合数据(数组、结构或结构数组)的内容初始置零,无关其结构。
使用 ={0} 是针对一维数组或一个首成员非复合数据的结构体初始化的代码。在你所描述的情况下,可能编译提示一个警告(gcc -Wall)或什么的。

2. sizeof 结构体的长度。

对结构类型 sizeof 只是直白地返回其占用的空间尺寸。若结构中有指针域,则对于该域,只占用了一个指针(int)的大小。至于是不是你想要的,看实际情况了。

3. 结构体中不要放置类。

对于结构体某域是一个类对象(实体)的话,使用直白地内存位置清零则可能导致问题。
这是因为继承与多态的原因,编译器会在类对象中放置一些地址。
在这种情况下的结构体不可以被清零。否则使用其类对象域会发生危险。

#12


明白了!
当struct中有指针的时候,sizeof(struct)就可能有问题,因为指针变量本身的大小可能和指针指向的类型大小不一样。。。。。。

#1


你这样是吧struct的指针成员都赋值为地址为0,无法使用

#2


引用 1 楼 bdmh 的回复:
你这样是吧struct的指针成员都赋值为地址为0,无法使用

神玛意思啊楼上,不行吗,可以吧

#3


lz的做法有问题
memset(properties,0,sizeof(properties));//就够了不需要*KEYS_MAX
否则的话就这么写:
memset(properties,0,sizeof(prop_data)*KEYS_MAX);

#4


全局变量,默认就全初始化为0了。
局部的,你那个可以

#5


引用 4 楼 luciferisnotsatan 的回复:
全局变量,默认就全初始化为0了。
局部的,你那个可以

看错了
sizeof(properties)出来就是数组大小了

#6


引用 1 楼 bdmh 的回复:
你这样是吧struct的指针成员都赋值为地址为0,无法使用

memset(properties,&0,sizeof(properties)*KEYS_MAX);
如果是因为结构体内元素是指针的话,是不是这样改? 好奇怪,取常数的地址。。。。。。

#7


prop_data properties[KEYS_MAX] = {};
即可

#8


引用 7 楼 leaveye 的回复:
C/C++ code
prop_data properties[KEYS_MAX] = {};
即可


我开始写的是
prop_data properties[KEYS_MAX] = {0};
被老大给打回来了,说是不合格,这样有什么不好的影响么?求详解!

#9


来学习的

#10


刚看到一个帖子
http://topic.csdn.net/u/20100709/12/55737840-7a5e-4a1c-81ae-d256ba17409f.html
1. 结构体中不要放置类。
2. sizeof对于包含指针的结构获得的长度不是你想要的。

有木有牛叉人士详解一把?

#11


1. 关于使用 ={} 初始化。

这种语法指定某复合数据(数组、结构或结构数组)的内容初始置零,无关其结构。
使用 ={0} 是针对一维数组或一个首成员非复合数据的结构体初始化的代码。在你所描述的情况下,可能编译提示一个警告(gcc -Wall)或什么的。

2. sizeof 结构体的长度。

对结构类型 sizeof 只是直白地返回其占用的空间尺寸。若结构中有指针域,则对于该域,只占用了一个指针(int)的大小。至于是不是你想要的,看实际情况了。

3. 结构体中不要放置类。

对于结构体某域是一个类对象(实体)的话,使用直白地内存位置清零则可能导致问题。
这是因为继承与多态的原因,编译器会在类对象中放置一些地址。
在这种情况下的结构体不可以被清零。否则使用其类对象域会发生危险。

#12


明白了!
当struct中有指针的时候,sizeof(struct)就可能有问题,因为指针变量本身的大小可能和指针指向的类型大小不一样。。。。。。