搜索
bottom↓
回复: 14

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

[复制链接]

出0入0汤圆

发表于 2013-3-19 17:50:05 | 显示全部楼层 |阅读模式
最近没活干,学习一下单片机。 请教一下,在结构体内定义的数组可以直接赋初值吗?如果不行怎么初始化这个数组的值呢?
struct Ti
  {
   unsigned long Ti_All;
   unsigned long Ti_Ok;
   unsigned char Ti_Temp[10]={0,1,2,3,4,5,6,7,8,9};//这里编译不过去有错误!
   unsigned char CRC_T0;
   unsigned char CRC_T1;
   //struct RI *RI_PX;
  }TiData;//发送数据存储区

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-3-19 18:01:38 | 显示全部楼层
找本C语言书看看 应该有答案

出0入0汤圆

发表于 2013-3-19 18:03:18 | 显示全部楼层
struct Ti
  {
   unsigned long Ti_All;
   unsigned long Ti_Ok;
   unsigned char Ti_Temp[10];
   unsigned char CRC_T0;
   unsigned char CRC_T1;
   //struct RI *RI_PX;
  }TiData={.Ti_Temp={1,2,3,4,5,6,7,8,9}};
我对语法也不太清楚,试试上面的呢?

出0入0汤圆

发表于 2013-3-19 19:06:18 | 显示全部楼层
lcofjp 发表于 2013-3-19 18:03
struct Ti
  {
   unsigned long Ti_All;

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

出0入0汤圆

发表于 2013-3-19 19:09:34 | 显示全部楼层
yklstudent 发表于 2013-3-19 19:06
结构体中的每个成员都赋值 才能编译过去

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

出0入0汤圆

发表于 2013-3-19 19:39:31 | 显示全部楼层
本帖最后由 yklstudent 于 2013-3-19 19:49 编辑
lcofjp 发表于 2013-3-19 19:09
c99语法可给部分成员初始化。


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

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

出0入0汤圆

发表于 2013-3-19 20:03:05 | 显示全部楼层
yklstudent 发表于 2013-3-19 19:39
哦  在PICC9.80平台下 测试了下 好像不可以部分赋初值
我在多试试几个平台看看

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

出0入0汤圆

发表于 2013-3-19 20:07:18 | 显示全部楼层
lcofjp 发表于 2013-3-19 20:03
跟c51没关系,是编译器的事

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

出0入0汤圆

 楼主| 发表于 2013-3-19 20:07:55 | 显示全部楼层

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

出0入0汤圆

发表于 2013-3-19 20:14:26 | 显示全部楼层
yklstudent 发表于 2013-3-19 20:07
哦  没表达清楚 我意思是指keil编译器  难道不支持C99标准吗????

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

出0入0汤圆

发表于 2013-3-20 08:04:04 | 显示全部楼层
lcofjp 发表于 2013-3-19 20:14
keil对c的支持很差的。
像for(int i=0; i

恩 你说的也是 谢谢了

出0入0汤圆

发表于 2013-3-20 11:06:59 | 显示全部楼层
结构体中的是申明!不是定义,定义要在下面!

出0入0汤圆

 楼主| 发表于 2013-3-20 11:46:59 | 显示全部楼层
还是没搞明白怎么赋初值,结构内部不是声明,是定义才对吧,都分配内存空间了!还请懂的老师教教我,手里只有一本《单片机C语言轻松入门》这书没有这方面的内容。实在没办法了只好写了一个数组拷贝函数将就用着完成实验。定义了一个CODE型数组K,用下面函数COPY到结构体内数组Ti_Temp[10],很笨的办法但能用了。
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;  
     }

出0入0汤圆

发表于 2013-3-20 13:36:39 | 显示全部楼层
struct Ti
  {
   unsigned long Ti_All;
   unsigned long Ti_Ok;
   unsigned char Ti_Temp[10];//这里编译不过去有错误!
   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下的

出0入0汤圆

 楼主| 发表于 2013-3-20 14:18:20 | 显示全部楼层
呵呵,我真的是力工出身,路边捡到本:《单片机C语言轻松入门》看了些日子,没系统学习过C语言,真看不懂你们讨论的C99标准是什么。你要是直白点告诉我:不能部分赋初值,要一次性赋全部,我就明白了。非常谢谢你!(你认识你头像中的女人吗?太邪恶了!)结构体和int,char是同级别的数据类型,就像你没法硬操作char,int中的几位。我就这样理解算了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 12:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表