OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4659|回复: 2

C语言数组长度的问题!

[复制链接]

93

主题

746

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2012-9-16
在线时间
286 小时
发表于 2013-12-12 10:50:41 | 显示全部楼层 |阅读模式
在主函数里初始化数组
int main (void) 
{
u8 savl;
u8 TimeNumber[7]={3,3,3,3,3,3,3};
 u32 j=0;
delay_init();     //延时函数初始化  
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init();    //LED端口初始化
// AT24CXX_Init(); //IIC初始化
// FSMC_SRAM_Init(); //外部静态存储器初始化
// SPI_Flash_Init();   //初始化FM25H20
RS485_Init(115200);
 Defaultspec=6;  //有256套规范,默认为0,取值0~255
while(1)
{
 
 
if(j%300==0)
{
// SendWriteSingleCommand(0X10,0X00);
// savl=ReceiveWriteSingleData();
// SendReadWeldingHistoryCommand(0X01);//读焊接历史
// delay_ms(100);  //一定要加延时 
// savl=ReceiveWeldingHistoryData();
// SendReadFaultHistoryCommand(0X00);//读故障历史
//  delay_ms(100);//一定要加延时
// savl=ReceiveFaultHistoryData();
// SendReadWeldingRecordsCommand(0XFFFF,31); //读焊接过程记录
// delay_ms(10);//一定要加延时
// savl=ReceiveWeldingRecordsData();
// printf("Length is:%d",sizeof(TimeData));  //值为7
SendReadWriteTimeCommand(1,TimeNumber);
delay_ms(20);
SendReadWriteTimeCommand(0,0);
delay_ms(20);
savl=ReceiveReadWriteTimeData();
if(savl==0)
{
printf("\n\r485测试成功,OK!");
}
j=0;
}
j++;
if(j%10==0)
{
LED3=!LED3;
delay_ms(100);
}

}
}
传参之函数
void SendReadWriteTimeCommand(u8 TimeCommand , u8 TimeNumber[] )
{
u16 crcData;
u8 i,length;
MODBUS_SEND_SBUF[0] = baseAddress;//地址
MODBUS_SEND_SBUF[1] = 0X44;//功能码
  MODBUS_SEND_SBUF[2] = TimeCommand;
if(TimeCommand==0)
{
crcData = crc16(MODBUS_SEND_SBUF,3);
    MODBUS_SEND_SBUF[3] = crcData & 0xff;   // CRC代码低位在前
    MODBUS_SEND_SBUF[4] = crcData >> 8;   //高位在后
 RS485_Send_Data(MODBUS_SEND_SBUF,5);
}
else
{

delay_ms(5);
                   
length = sizeof(TimeNumber); //为什么输出的长度是4呢?
for(i=0;i<length ;i++)
{
MODBUS_SEND_SBUF[3+i] = TimeNumber;
printf("\n\r%d\n\r",TimeNumber);
}
crcData = crc16(MODBUS_SEND_SBUF,length+3);
    MODBUS_SEND_SBUF[length+3] = crcData & 0xff;   // CRC代码低位在前
    MODBUS_SEND_SBUF[length +4] = crcData >> 8;   //高位在后
 RS485_Send_Data(MODBUS_SEND_SBUF,length+5);
}
// MODBUS_SEND_SBUF[3] = RecordPointer&0XFF;
// MODBUS_SEND_SBUF[4] = RecordNumber;
//
}

数组长度怎么会变呢?可能什么影响的呢?





纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-12-12 11:59:33 | 显示全部楼层
u8 TimeNumber[]  这个是局部变量, 是个指针类型的。。。

跟上面全局的那个不要搞混了。!
回复 支持 反对

使用道具 举报

15

主题

180

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2013-4-23
在线时间
25 小时
发表于 2013-12-12 13:16:27 | 显示全部楼层
32位下,sizeof(指针类型)永远=4
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 03:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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