elecompu 发表于 2013-3-19 17:50:05

请教:结构体内定义一个数组可以直接赋初值吗?

最近没活干,学习一下单片机。{:smile:} 请教一下,在结构体内定义的数组可以直接赋初值吗?如果不行怎么初始化这个数组的值呢?
struct Ti
{
   unsigned long Ti_All;
   unsigned long Ti_Ok;
   unsigned char Ti_Temp={0,1,2,3,4,5,6,7,8,9};//这里编译不过去有错误!
   unsigned char CRC_T0;
   unsigned char CRC_T1;
   //struct RI *RI_PX;
}TiData;//发送数据存储区

yklstudent 发表于 2013-3-19 18:01:38

找本C语言书看看 应该有答案

lcofjp 发表于 2013-3-19 18:03:18

struct Ti
{
   unsigned long Ti_All;
   unsigned long Ti_Ok;
   unsigned char Ti_Temp;
   unsigned char CRC_T0;
   unsigned char CRC_T1;
   //struct RI *RI_PX;
}TiData={.Ti_Temp={1,2,3,4,5,6,7,8,9}};
我对语法也不太清楚,试试上面的呢?

yklstudent 发表于 2013-3-19 19:06:18

lcofjp 发表于 2013-3-19 18:03 static/image/common/back.gif
struct Ti
{
   unsigned long Ti_All;


结构体中的每个成员都赋值 才能编译过去

lcofjp 发表于 2013-3-19 19:09:34

yklstudent 发表于 2013-3-19 19:06 static/image/common/back.gif
结构体中的每个成员都赋值 才能编译过去

c99语法可给部分成员初始化。

yklstudent 发表于 2013-3-19 19:39:31

本帖最后由 yklstudent 于 2013-3-19 19:49 编辑

lcofjp 发表于 2013-3-19 19:09 static/image/common/back.gif
c99语法可给部分成员初始化。

哦在PICC9.80平台下 测试了下 好像不可以部分赋初值
我在多试试几个平台看看

C51下测试不允许 GCC下允许难道C51不支持C99标准???

lcofjp 发表于 2013-3-19 20:03:05

yklstudent 发表于 2013-3-19 19:39 static/image/common/back.gif
哦在PICC9.80平台下 测试了下 好像不可以部分赋初值
我在多试试几个平台看看



跟c51没关系,是编译器的事

yklstudent 发表于 2013-3-19 20:07:18

lcofjp 发表于 2013-3-19 20:03 static/image/common/back.gif
跟c51没关系,是编译器的事

哦没表达清楚 我意思是指keil编译器难道不支持C99标准吗????

elecompu 发表于 2013-3-19 20:07:55


struct Ti
{
   unsigned long Ti_All;
   unsigned long Ti_Ok;
   unsigned char Ti_Temp;
   unsigned char CRC_T0;
   unsigned char CRC_T1;
   //struct RI *RI_PX;
}TiData={.Ti_Temp={1,2,3,4,5,6,7,8,9}};
我对语法也不太清楚,试试上面的呢?----这样也没编译过,刚跑完步累吐血了!一会静心下来再学习,谢谢各位!

lcofjp 发表于 2013-3-19 20:14:26

yklstudent 发表于 2013-3-19 20:07 static/image/common/back.gif
哦没表达清楚 我意思是指keil编译器难道不支持C99标准吗????

keil对c的支持很差的。
像for(int i=0; i<10; i++);这样的语法都不行。
可能是还未支持c99

yklstudent 发表于 2013-3-20 08:04:04

lcofjp 发表于 2013-3-19 20:14 static/image/common/back.gif
keil对c的支持很差的。
像for(int i=0; i

恩 你说的也是 谢谢了

rookies 发表于 2013-3-20 11:06:59

结构体中的是申明!不是定义,定义要在下面!

elecompu 发表于 2013-3-20 11:46:59

还是没搞明白怎么赋初值,结构内部不是声明,是定义才对吧,都分配内存空间了!还请懂的老师教教我,手里只有一本《单片机C语言轻松入门》这书没有这方面的内容。实在没办法了只好写了一个数组拷贝函数将就用着完成实验。定义了一个CODE型数组K,用下面函数COPY到结构体内数组Ti_Temp,很笨的办法{:dizzy:}但能用了。
void Data_Copy(unsigned char *S,unsigned char *K)//将K指向的地址内数据COPY=10个到S地址所指向的地址内
    {
    unsigned char m;
   for(m=0;m<10;m++,S++,K++)   
      *S=*K;
   }

yklstudent 发表于 2013-3-20 13:36:39

struct Ti
{
   unsigned long Ti_All;
   unsigned long Ti_Ok;
   unsigned char Ti_Temp;//这里编译不过去有错误!
   unsigned char CRC_T0;
   unsigned char CRC_T1;
   //struct RI *RI_PX;
}TiData = {0,0,{0,1,2,3,4,5,6,7,8,9},0,0};//发送数据存储区
都和三楼的兄弟讨论了半天 楼主竟然还不知道怎么赋值
只能写个keil C51下的

elecompu 发表于 2013-3-20 14:18:20

呵呵,我真的是力工出身,路边捡到本:《单片机C语言轻松入门》看了些日子,没系统学习过C语言,真看不懂你们讨论的C99标准是什么。你要是直白点告诉我:不能部分赋初值,要一次性赋全部,我就明白了。非常谢谢你!(你认识你头像中的女人吗?{:lol:}太邪恶了!)结构体和int,char是同级别的数据类型,就像你没法硬操作char,int中的几位。我就这样理解算了!
页: [1]
查看完整版本: 请教:结构体内定义一个数组可以直接赋初值吗?