4822|11

28

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

数组作为函数参数应该怎么声明? [复制链接]

使用IAR,每次用数组作为函数变量比如:void REG_SET(uchar *str,uchar length,uchar addr)都会出现
"declaration is incompatible with __cc_version2 void REG_SET(unsigned char,unsigned char,...)”。
如果把数组定义为全局变量,不出现在参数里就没事比如
在main()函数外定义
uchar str[]={};
void REG_SET(uchar length,uchar addr);
但是觉得这种方法不好,求问有没有更好的方法?
此帖出自单片机论坛

最新回复

typedef unsigned char uint8; uint8 Sys[4][13]={"系统参数设置","温度参数设置","湿度参数设置","工作状态查看"}; void PutString(uint8 add,uint8 *pstr) 调用的时候就是 PutString(add,&Sys[0][0]);//显示“系统参数设置” PutString(add,&Sys[1][0]); PutString(add,&Sys[2][0]); PutString(add,&Sys[3][0]);   详情 回复 发表于 2014-6-24 08:39
点赞 关注(1)
 

回复
举报

977

帖子

4

TA的资源

纯净的硅(中级)

沙发
 
用指针做参数,比如
uchar str[]={};
void REG_SET(uchar *ptr,uchar length,uchar addr)
调用的时候REG_SET(&str[0],length,addr);
此帖出自单片机论坛

点评

谢谢大神回复,我按照你说的修改,还是报错"argument of type"unsigned char *"is incompatible with parameter of type "unsigned char""。  详情 回复 发表于 2014-6-23 10:19
 
 

回复

1800

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
用数据作为函数变量是没问题的,
编译出错是不是你其他调用的地方格式跟函数体格式不一样
此帖出自单片机论坛
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

4
 
MrKingMCU 发表于 2014-6-23 10:03
用指针做参数,比如
uchar str[]={};
void REG_SET(uchar *ptr,uchar length,uchar addr)

谢谢大神回复,我按照你说的修改,还是报错"argument of type"unsigned char *"is incompatible with parameter of type "unsigned char""。
此帖出自单片机论坛
 
 
 

回复

977

帖子

4

TA的资源

纯净的硅(中级)

5
 
你把那个函数贴出来,我看看看这个报错是指哪里的错误
此帖出自单片机论坛

点评

谢谢!  详情 回复 发表于 2014-6-23 10:28
已经对了,我忘了修改了一下define.h里的声明了。  详情 回复 发表于 2014-6-23 10:28
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

6
 
MrKingMCU 发表于 2014-6-23 10:22
你把那个函数贴出来,我看看看这个报错是指哪里的错误

已经对了,我忘了修改了一下define.h里的声明了。
此帖出自单片机论坛
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

7
 
MrKingMCU 发表于 2014-6-23 10:22
你把那个函数贴出来,我看看看这个报错是指哪里的错误

谢谢!
此帖出自单片机论坛
 
 
 

回复

977

帖子

4

TA的资源

纯净的硅(中级)

8
 
不客气,解决了就好,遇到数组作为被调用参数的情况下我一般情况都是使用指针做数组参数,在调用函数的时候让指针指向对应的数组就行了。
这个数组也可以是二维或者更复杂的数组,程序调用很方便,比如液晶的显示函数,数组定义好要显示的内容,然后直接一个显示函数用指针指就行了
此帖出自单片机论坛

点评

void set(uchar **cmd);[/backcolor] uchar re[4][2]={};[/backcolor] uchar *m[4];[/backcolor] uchar i;[/backcolor] for(i=0;i  详情 回复 发表于 2014-6-23 11:44
如果是二维数组,怎么定义?[/backcolor] 我试了一下set(uchar **cmd);[/backcolor] 调用set(&re[0];);[/backcolor] 或者set(&re[0][0]);都会报错。[/backcolor]  详情 回复 发表于 2014-6-23 10:41
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

9
 
MrKingMCU 发表于 2014-6-23 10:32
不客气,解决了就好,遇到数组作为被调用参数的情况下我一般情况都是使用指针做数组参数,在调用函数的时候 ...

如果是二维数组,怎么定义?
我试了一下set(uchar **cmd);
调用set(&re[0];);
或者set(&re[0][0]);都会报错。
此帖出自单片机论坛
 
 
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

10
 
MrKingMCU 发表于 2014-6-23 10:32
不客气,解决了就好,遇到数组作为被调用参数的情况下我一般情况都是使用指针做数组参数,在调用函数的时候 ...

void set(uchar **cmd);
uchar re[4][2]={};
uchar *m[4];
uchar i;
for(i=0;i<4;i++)
m=re;
set(m);
估计是这样吧?
此帖出自单片机论坛

点评

typedef unsigned char uint8; uint8 Sys[4][13]={"系统参数设置","温度参数设置","湿度参数设置","工作状态查看"}; void PutString(uint8 add,uint8 *pstr) 调用的时候就是 PutString(add,&Sys[0][0]);//显  详情 回复 发表于 2014-6-24 08:39
 
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

11
 
这个报错-_-!!是不是用了默认函数声明?定义的函数有没有写函数声明?
此帖出自单片机论坛
 
 
 

回复

977

帖子

4

TA的资源

纯净的硅(中级)

12
 
墨染卿卿 发表于 2014-6-23 11:44
void set(uchar **cmd);
uchar re[4][2]={};
uchar *m[4];

typedef unsigned char uint8;
uint8 Sys[4][13]={"系统参数设置","温度参数设置","湿度参数设置","工作状态查看"};

void PutString(uint8 add,uint8 *pstr)

调用的时候就是
PutString(add,&Sys[0][0]);//显示“系统参数设置”
PutString(add,&Sys[1][0]);
PutString(add,&Sys[2][0]);
PutString(add,&Sys[3][0]);
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表