OpenEdv-开源电子网

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

二维数组形参传值

[复制链接]

21

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2014-3-12
在线时间
3 小时
发表于 2014-4-17 19:04:40 | 显示全部楼层 |阅读模式

之前学习写字画图程序时遇到二维数组形参传值问题。虽然解决了,但也就会一种方法。目前是这样的,程序就省略点了


先声明一个二维数组

const u8 String_CH2[][5]={{0x05,0x32,0xA5,0x77,0x32},
                                          {0xD4,0x08,0x11,0x09,0x02},
                                          {0xB6,0xB2,0x34,0x55,0x04},
                                          {0xF6,0xF2,0x24,0x15,0x01}};  


写个原函数


void get(const u8 CH[][5])
{

     LCD_ShowNum(10,90,CH[0][0],5,16);    //    String_CH2[0][0]   5
     LCD_ShowNum(10,120,*(*(CH+1)+1),5,16);   //  String_CH2[1][1]   0xC2     194

}

调用函数    get ( String_CH2 ); 

这样是可以准确读出对应数组元素的  这样一来就算是可以直接调数组名字投到函数形参里来操作这个数组了  不过让人不爽的是数组的横向值【5】数字不能省略。而且实参数要和形参数一样。也就是我原函数形参横向维度【5】要和实参横向维度【5】数值一样,且不能省略。如果以后我要写一些更大的数值的话原函数和数组定义的这个数就只能预先写大点,比如【4】【255】,但实际我只用到【4】【5】,那么多开辟的数组元素就浪费位置了。


在网上我一直查资料,想如何解决这问题。 试过这样    void get(const u8**CH)  {。。。。。}      

                                                              调用函数    get(const (u8*)String_CH2);    这样编译器通过但,真正读数组元素却什么也读不出。

其他的一些配合都是编译报错。


所以这里,由于C程序水平的限制,我没有弄出来,谁比较熟悉指针用法的朋友指导一下,原子大师能指导下吗? 我的目的是二维数组的传值不要受到

数字的束缚。





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

21

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2014-3-12
在线时间
3 小时
 楼主| 发表于 2014-4-17 19:07:19 | 显示全部楼层

有个地方注解写错了 

 LCD_ShowNum(10,120,*(*(CH+1)+1),5,16);   //  String_CH2[1][1]   0xC2     194     显示的数值

改成 LCD_ShowNum(10,120,*(*(CH+1)+1),5,16);   //  String_CH2[1][1]   0x08    8   显示的数值

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-17 20:53:50 | 显示全部楼层
这我也没有好办法,帮顶了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-18 09:27:50 | 显示全部楼层
回复【楼主位】duanyuzhong:
---------------------------------
我用结构体操作ASCII码表,指针操作,读取的数值完全不对

http://www.openedv.com/posts/list/30945.htm
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2015-3-9
在线时间
20 小时
发表于 2016-9-22 17:43:57 | 显示全部楼层
帮顶,遇到同样问题,有人解决了吗?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-9-13
在线时间
15 小时
发表于 2018-5-23 16:39:50 | 显示全部楼层
https://blog.csdn.net/yunyun1886358/article/details/5659851
MARK一下,别人的帖子,希望能帮到你
回复 支持 反对

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-7-27 09:46:21 | 显示全部楼层
vilsen 发表于 2018-5-23 16:39
https://blog.csdn.net/yunyun1886358/article/details/5659851
MARK一下,别人的帖子,希望能帮到你

很有用啊
回复 支持 反对

使用道具 举报

6

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2015-6-1
在线时间
126 小时
发表于 2018-7-27 10:10:29 | 显示全部楼层
既然是二维数组,就必须指定维度,不然哪能知道什么时候到【1】【x】。
个人习惯将二维数组转为一维来使用。

#define array_len 5

const u8 String_CH2[]={0x05,0x32,0xA5,0x77,0x32,
                                        0xD4,0x08,0x11,0x09,0x02,
                                          0xB6,0xB2,0x34,0x55,0x04,
                                          0xF6,0xF2,0x24,0x15,0x01};


void get(const u8 *CH)
{
        printf("%x %x",CH[0*array_len + 0], CH[1*array_len +1]);
}
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 22:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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