打印
[AVR单片机]

关于结构体中二维数组的引用问题

[复制链接]
3340|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

改回来了,中复制过来发贴时,搞错了,但这不是问题所在.

使用特权

评论回复
5
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个元素的一维数组,并不是函数指针啊。

使用特权

评论回复
6
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])有错。

使用特权

评论回复
7
maofeng456| | 2012-10-26 22:24 | 只看该作者
都是内行

使用特权

评论回复
8
maofeng456| | 2012-10-26 22:25 | 只看该作者
可以够下载的了吗

使用特权

评论回复
9
dqyubsh| | 2012-10-28 00:26 | 只看该作者
第一感觉是函数的形参写成[7]就很别扭。

使用特权

评论回复
10
joyme| | 2012-10-29 16:13 | 只看该作者
high low只有4个数据,为什么初始化了这么多
IR_Encode的形参只要是指针就好了,不要后面的[7]
数组名就是地址,不需要取地址吧

也没说第一句是重点啊,你只改了第一个

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

95

帖子

2

粉丝