你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

C语言指针运算符常出的错误

[复制链接]
mantishell 发布时间:2016-10-23 20:33
4 A% b& s# G3 J" {: y
首先举个例子:
+ u. |% B' e/ F- u' D* z! _: j7 M0 b$ _
int sum(int *start,int *end)" b3 g" |1 e5 ]. _  }
{
( P" t( L# L$ M" x7 U2 W) f6 K2 B& L3 H  F3 q5 e" e$ t; P
    int total;
) W$ ^* N% u& I4 W4 }' e    total = *start++;
* }6 n0 q3 K/ v# B/ `: \7 {}, n' h! A5 X" ~9 E8 _

9 e6 L  Y- y9 Z; n+ `程序里有这条语句,total = *start++;
0 w! h' T: X$ y: X2 @5 f) u说明:一元运算符*和++具有相等的优先级,但它在结合时是从右向左进行的。这就意味着++应用于start,而不是应用于*start。也就是说,是指针自增1,而不是指针所指向的数据自增1。后缀形式(即start++,而不是++start)表示先把指针指向的数据加 到total上,然后指针自增1。如果程序使用*++start,则顺序就变成指针先自增1,然后再使用其指向的值。然而如果程序使用(*start)++,那么会使用start所指向的数据,然后再使该数据自增1,而不是使指针自增1。这样,指针所指向的地址不变,但其中的元素却变成了一个新数据。尽管*start++比较常用,但为了清晰起见,应该使用*(start++)。
( `, Z1 J( \* _( k
: e# u) `# R1 ^% _% f: F* R' T! v, Q8 S# _6 |) y. w
赞 收藏 1 评论5 发布时间:2016-10-23 20:33

举报

5个回答
lisingch 回答时间:2016-10-23 21:02:58
学习了,谢谢!
assssdz 回答时间:2016-10-23 21:19:25
zengyi703-16313 回答时间:2016-10-24 08:18:51
学习了,谢谢!
高二毛 回答时间:2016-10-24 08:21:32
你说的貌似不对呀,应该是先进行*运算,再++吧,不能误导吃瓜群众啊。
hooke 回答时间:2016-10-24 09:45:05
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版