[C]*与++优先级问题

来源:互联网 发布:苹果音频剪辑软件 编辑:程序博客网 时间:2024/05/23 13:09

从上例中我们可以看到。当 * (作为地址解析符) ++ 同时作用在指针时,不管是前置还是++,都要比*有更高的优先级。比如代码中的:

 

int A = *parr++;

 

我们来一个反证:假设*的优先级比++高,那么,应先计算:

 

*parr 结果为: 1 (第一个元素)

然后计算  1++ ,结果为:2。

 

但实验发现结果为 1,这个1 又是如何来的呢?有点复杂。

首先,++优先计算,所以应先计算:parr++

结果是parr指向了下一个元素:2。因为这是后置++,所以,它必须返回自己计算之前的值;所以,在改变parr之前,编译程序会生成一个临时变量,计算原先parr的值。我们假设为 old_parr 。下面是第二步操作:

A = *old_parr

由于 old_parr parr 原来的值,指向第一个元素,所以 A 得到值: 1 。

 

可见,后置 ++ 或 后置-- 操作,需要系统生成一个临时变量。

如果这个变量占用的内存空间很小(比如指针类型总是只有4字节),则该操作带来的,对程序速度的负面影响可以不计,如果变量很大,并且多次操作。则应在可能的情况下,尽量使用前置++或前置--操作。

 
原创粉丝点击