如何将结构体数组赋初值为零?

matrix2009 2008-06-06 08:04:24
自己定义了一个结构体数组ShapeDist sdist[18];,结构体如下,我想知道如何给这个结构体数组赋初值为0,
就是那几个float和int 成员。我知道普通数组可以用memset函数来赋初值,但是结构体数组怎么赋初值呢
struct ShapeDist
{
CString name;
CString route;
float dx[100];
float dy[100];
float rx[100];
float ry[100];
float dcz;
float rcz;
float tcz;
int dnum;
int rnum;
};
...全文
3234 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen2009zhou 2011-04-21
  • 打赏
  • 举报
回复
不太懂
red1986 2009-07-09
  • 打赏
  • 举报
回复
stMenuItem MainMenu[5]=
{ //MenuCount DisplayString Subs ChildrenMenus ParentMenus
{5, "1.Time Set" , NullSubs, TimeMenu, Null},
{5, "2.Voice Center", NullSubs, VoiceMenu, Null},
{5, "3.Robot Control", NullSubs, RobotMenu, Null},
{5, "4.Flash Option", NullSubs, FlashMenu, Null},
{5, "5.Back", NullSubs, MainMenu, MainMenu},
};
lsldd 2008-06-09
  • 打赏
  • 举报
回复
memset((char*)&object + sizeof(CString) * 2, 0, sizeof(ShapeDist) - sizeof(CString) * 2);
注意,第一个参数是从结构体首地址+sizeof(CString) * 2开始的,第三个参数所以要减去.
但我也不是很明白直接实使用
memset((char*)&object , 0, sizeof(ShapeDist) );
会有什么后果呢?

法尔我给他 2008-06-09
  • 打赏
  • 举报
回复
关注中!!!!!!!!!!!!!!!!
matrix2009 2008-06-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 akirya 的回复:]
memset( &object.dx, 0, sizeof(ShapeDist) - sizeof(CString) * 2);
[/Quote]

授人以鱼不如授人以渔
为何要去掉两个CString成员的大小?
这块小弟不是很明白
能够给解释一下
abc_46664 2008-06-09
  • 打赏
  • 举报
回复
学习
ponymayan 2008-06-09
  • 打赏
  • 举报
回复
seeing
jzww2003 2008-06-07
  • 打赏
  • 举报
回复
学习
baihacker 2008-06-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 visame 的回复:]
引用 1 楼 baihacker 的回复:
额...注意两个CString...
memset((char*)&object + sizeof(CString) * 2, 0, sizeof(ShapeDist) - sizeof(CString) * 2);

这个方法准确吗?保证没有系统填充的空格什么的?
[/Quote]

嗯,我的有问题...见二楼
visame 2008-06-07
  • 打赏
  • 举报
回复
要写构造函数,就用循环好了。
struct ShapeDist
{
CString name;
CString route;
float dx[100];
float dy[100];
float rx[100];
float ry[100];
float dcz;
float rcz;
float tcz;
int dnum;
int rnum;
//构造函数
ShapeDist():dum(0),rnum(0)
{
for (int i=0;i<100;++i)
{
dx[i]=dy[i]=rx[i]=ry[i]=0;
}
}
};
边城狂人 2008-06-07
  • 打赏
  • 举报
回复
memset(dy,0.0f,101*sizeof(float));
memset(ry,0.0f,101*sizeof(float));

不用0.0f,直接0就行了。
用memset是直接设置的每个字节,根本不管你是什么类型。

比如你的float型,4字字节,那
memset(pointer, 0, sizeof(float));
会把pointer指向的4个字节都设置成0。
yshuise 2008-06-07
  • 打赏
  • 举报
回复
我觉得问题很小。
matrix2009 2008-06-07
  • 打赏
  • 举报
回复
struct ShapeDist
{
CString name;
CString filepath;
float dy[101];
float ry[101];
float dz;
float rz;
float tz;
ShapeDist():dz(0.0f),rz(0.0f),tz(0.0f)
{
memset(dy,0.0f,101*sizeof(float));
memset(ry,0.0f,101*sizeof(float));
}
};
我重写了一下
想用memset初始化数组成员,编译通过,但是有两个warnings,
warning C4244: 'argument' : conversion from 'const float' to 'int', possible loss of data
warning C4244: 'argument' : conversion from 'const float' to 'int', possible loss of data
我看了一下memset函数的定义,发现是
#include <string.h>
void* memset( void* buffer, int ch, size_t count );
主要是初始化字符数组的,似乎整形也可以
其它的不知行不行
运行程序时这两个warning会出现什么问题
yshuise 2008-06-07
  • 打赏
  • 举报
回复
ls是正确的,是c语言的风格,如果写了构造函数不能这样写。
飞哥 2008-06-07
  • 打赏
  • 举报
回复
结构体数组也是一样的


memset((void*)sdist, 0x00, sizeof(sdist) * 18);
yshuise 2008-06-07
  • 打赏
  • 举报
回复
struct ShapeDist 
{
CString name;
CString route;
float dx[100];
float dy[100];
float rx[100];
float ry[100];
float dcz;
float rcz;
float tcz;
int dnum;
int rnum;
ShapeDist(){

dx[100] = {0};
dy[100] = {0};
rx[100] = {0};
ry[100] = {0};
dcz = rcz =tcz = 0.0;
dnum = rnum = 0;
}

};
matrix2009 2008-06-07
  • 打赏
  • 举报
回复
二楼是把结构体初始化为零吧
不是结构体数组吧

似乎定义一个结构体的默认构造函数要方便些
matrixdwy 2008-06-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 adlay 的回复:]
给 ShapeDist 一个构造函数,在构造函数里把成员设置为 0。
[/Quote]
visame 2008-06-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 baihacker 的回复:]
额...注意两个CString...
memset((char*)&object + sizeof(CString) * 2, 0, sizeof(ShapeDist) - sizeof(CString) * 2);
[/Quote]
这个方法准确吗?保证没有系统填充的空格什么的?
matrix2009 2008-06-06
  • 打赏
  • 举报
回复
怎么写构造函数呢
尤其是几个数组成员 怎么写呢
加载更多回复(5)

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧