赞
踩
部分运算符优先级和结合方向表
首先我们在优先级及结合方向表中可以看到++运算符和*运算符是同属于一级的,且结合方向都是从右到左现在我们可以对下面的问题进行解释:
下面p都是指针。
首先p的内存地址先自加一(++p先加后用),然后再进行解引用运算。
先进行解引用(p++先用后加),返回值以后再进行地址加1再进行解引用。
先进行解引用,然后将值加1,不是地址加1
先将地址加1,然后进行解引用,然后再对值加1
先进行解引用,然后再把值加1,返回值后再进行地址加1后再解引用再将值加1
测试程序:
#include<stdio.h>
void main()
{
int a[] = { 1, 3, 5, 7, 9, };
int *p = a;
/*
** 注意每次运行一句话,因为这里不是临时变量,顺序会影响结果
*/
printf( "*++p:%x\n", *++p );
//printf( "*p++:%x\n", *p++ );
//printf( "++*p:%x\n", ++*p );
// printf( "++*++p:%x\n", ++*++p );
// printf( "++*p++:%x\n", ++*p++ );
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。