指针变量运算

p++ 与 ++p

int a [ 3 ] = { 1 , 2 , 3 } ;     

int * p = a   或   int * p = & a [ 0 ] ;

(1)p = p + 1与 p ++ 与 ++ p 不参与其他运算时意义相同,都代表指针变量增加了一个int型字节大小,在参与其他混合运算时意义不同。

printf ( " % p " , p );

% p == 0xaaaa0000

printf ( " % p " , p+1); //由于是整型在 p 的基础上增加4个字节

% p == 0xaaaa0004

printf ( " % p " , p = p+1); //意义与 p + 1 相同 

% p == 0xaaaa0004

printf ( " % p " , p ++); // p 在前 ++ 在后,printf 先执行输出 p 的值,再进行 ++ 运算

% p == 0xaaaa0000

printf ( " % p " , ++ p);// ++ 在前 p 在后,printf输出的是 ++运算后的值

% p == 0xaaaa0004

数组(&a[0] || a )

int a [ 3 ] = { 1 , 2 , 3 } ;     

int * p = NULL ;

a + 1  ||  & a [ 0 ] + 1 ; //没有语法错误,只是无意义,因为没有赋值

a = a + 1  ||  & a [ i ]  = & a [ 0 ] + 1 ; //语法错误,数组或者变量的首地址不能进行赋值修改。

p = a + 1  ||  p = & a [ 0 ] + 1 ; //没有对数组做任何修改,将值赋值给了指针变量 p 。

a ++  ||  & a [ 0 ] ++ ; //语法错误,数组或者变量的首地址不能进行赋值修改。

++ a  ||  ++ & a [ 0 ] ; //语法错误,数组或者变量的首地址不能进行赋值修改。

混合运算中的 p++ || ++p

int  num = 10;

int sum , x = 1 , y = 2;

int * q = NULL;

int * p = & num;

if ( num ++ ) // if 先判断num的值,再进行 num++ 运算

if(++ num)// if 判断的是 num ++ 的值

sum = ( x -- == y ++ ) ?  -- x : y -- ; //()里判断的是 x == y,而不是 x -- == y;

q = p ++ // q 被赋值的是 p 的地址,而不是 p++ 

q = ++ p // q 中的地址是 p 增加了一个int型的字节的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值