硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5811|回复: 8
收起左侧

函数形参的疑惑? const的作用?

[复制链接]

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2015-4-5 15:43:29 | 显示全部楼层 |阅读模式
//比较N个字符,相同输出0,不相同输出N,表示第N个字符不符。
int16_t CharNComp(const char* DataP1, const char* DataP2, uint16_t number)
{
    uint16_t i=0;
    for(i=0;i<number;i++)
        {
            if (*(DataP1+i)!=*(DataP2+i)) {return i+1;}
        }
        return 0;
}
这个函数在定义的时候,必须加入const关键字。如果只用char*就会提示错误!!为什么呢?

使用的时候只是,if(CharNComp(A,B,10)==0) {.....} ,A和B是两个char数组,一个是变量,在RAM区;另一个是固定数组,在ROM区。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2015-4-6 10:00:28 | 显示全部楼层
还有这种问题,后面我也试试看。
一般如果定义是:int16_t CharNComp(const char* DataP1, const char* DataP2, uint16_t number) 这样的话,
我使用的时候会加上个强制类型转换:if(CharNComp((const char *)A, (const char *)B,10)==0) {.....}
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2021-3-9 13:52:18 | 显示全部楼层
什么编译器?iar?
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2021-6-23 14:23:58 | 显示全部楼层
for(i=0;i&lt;number;i++) 报错应该是因为这里的语法错误 楼主意图应该是i<number;

经过测试去掉const是可以的,但作为比较用途,实际上也应该加上const,用于比较的数组不能修改


test1.jpg
回复

使用道具 举报

210

主题

1042

回帖

1682

积分

至尊会员

More we do, more we can do.

积分
1682
发表于 2021-7-29 09:52:03 | 显示全部楼层
从楼主的“i&lt;number”看,是不是误是用了中文输入法的<符号?
回复

使用道具 举报

0

主题

124

回帖

124

积分

初级会员

积分
124
发表于 2021-9-4 16:50:08 | 显示全部楼层
指针加const是让编译器监测你没有在函数内修改指针所指向的内容
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2021-9-6 20:28:52 | 显示全部楼层
有的编译器对类型检查比较严格,const char*是不等于char *的。
回复

使用道具 举报

2

主题

37

回帖

48

积分

新手上路

积分
48
发表于 2022-11-10 19:23:04 | 显示全部楼层
image.png
楼主应该是for里面的条件判断写错了吧,加不加const 只是对指针指向类型不能变化而已,测试过了都没问题的。
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2022-11-10 22:51:29 | 显示全部楼层
应该不会吧?这样的话违背了C标准了呀,假编译器吧
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 04:01 , Processed in 0.328949 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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