[AVR单片机] 关于结构体中二维数组的引用问题

[复制链接]
 楼主| daiqh 发表于 2012-10-26 13:01 | 显示全部楼层 |阅读模式
本帖最后由 daiqh 于 2012-10-26 22:05 编辑

有结构体:
struct cmd_pattern
{
    unsigned int sign_start_high;
    unsigned int sign_start_low;
    unsigned int sign_end_high;  
    unsigned int sign_end_low;   
    unsigned int sign_start_high;
    unsigned int sign_start_low;   
    unsigned int sign_end_high;   
    unsigned int sign_end_low;   
    unsigned int cmd_contant[2][7];
};
//////////////////////////////////////////////
//cmd_ram初始化
struct cmd_pattern cmd_ram=
{
    9024,4512,540,24414,540,540,540,540,
    {
        {68,2,0x83,0x55,0x90,0x6F,0},
        {68,2,0x83,0x55,0x90,0x6F,0}
    }
};
///////////////////////////////////////////////
//IR_Encode函数定义
unsigned char IR_Encode(unsigned int (*p)[7])
{
   ....;
   ....;
}

/////////////////////////////////////////////////
//传递结构体中二维数组当中的第一行数组(一维数组)首地址
IR_Encode ( & ( cmd_ram . cmd_contant) ) ;

但不能过,请问哪里出错了?
joyme 发表于 2012-10-26 15:22 | 显示全部楼层
high low只有4个数据,为什么初始化了这么多
IR_Encode的形参只要是指针就好了,不要后面的[7]
数组名就是地址,不需要取地址吧
airwill 发表于 2012-10-26 17:38 | 显示全部楼层
unsigned char IR_Encode(unsigned int (*p)[7])

定义有错, 这里的 p 是函数指针哦.

unsigned char IR_Encode(unsigned int *p)  
就可以了
 楼主| daiqh 发表于 2012-10-26 22:10 | 显示全部楼层
high low只有4个数据,为什么初始化了这么多
IR_Encode的形参只要是指针就好了,不要后面的[7]
数组名就是地址,不需要取地址吧
joyme 发表于 2012-10-26 15:22

改回来了,中复制过来发贴时,搞错了,但这不是问题所在.
 楼主| daiqh 发表于 2012-10-26 22:12 | 显示全部楼层
unsigned char IR_Encode(unsigned int (*p)[7])

定义有错, 这里的 p 是函数指针哦.

unsigned char IR_Encode(unsigned int *p)  
就可以了
airwill 发表于 2012-10-26 17:38

(*p)[7]:  P是指向一个含有7个元素的一维数组,并不是函数指针啊。
 楼主| daiqh 发表于 2012-10-26 22:19 | 显示全部楼层
以下程序测试
struct cmd_pattern
{
    unsigned int sign_start_high;
    unsigned int sign_start_low;
    unsigned int sign_end_high;  
    unsigned int sign_end_low;   
    unsigned int sign_1_high;   
    unsigned int sign_1_low;     
    unsigned int sign_0_high;   
    unsigned int sign_0_low;     
  
    unsigned int cmd_contant[2][7];

};


struct cmd_pattern cmd_ram=
{
   
    9024,4512,540,24414,540,540,540,540,
    {
        {68,2,0x83,0x55,0x90,0x6F,0},
        {68,2,0x83,0x55,0x90,0x6F,0}
    }  
};


void IR_Encode(unsigned int (*p)[7])
{
;        
}



void main(void)
{
        IR_Encode( &cmd_ram.cmd_contant );
}

在keil环境下没报错,但在CVAVR环境下报错了,提示void IR_Encode(unsigned int (*p)[7])有错。
maofeng456 发表于 2012-10-26 22:24 | 显示全部楼层
都是内行
maofeng456 发表于 2012-10-26 22:25 | 显示全部楼层
可以够下载的了吗
dqyubsh 发表于 2012-10-28 00:26 | 显示全部楼层
第一感觉是函数的形参写成[7]就很别扭。
joyme 发表于 2012-10-29 16:13 | 显示全部楼层
high low只有4个数据,为什么初始化了这么多
IR_Encode的形参只要是指针就好了,不要后面的[7]
数组名就是地址,不需要取地址吧

也没说第一句是重点啊,你只改了第一个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

95

帖子

2

粉丝

17

主题

95

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部