[C++]printf(),以及++i, i++

《程序员面试宝典》的题目

int main()
{
int b = 3;
int arr[] = { 6,7,8,9,10 };
int *ptr = arr;
*(ptr++) += 123;    //(0)


printf("%d,%d\n", *ptr, *(++ptr)); //(1)
//cout << *ptr<<" "<<*(++ptr) << endl;//(2)

        

        //cout << *ptr <<"  ";          //(3)
//cout << *(++ptr) << endl;


system("pause");
    return 0;
}

1. printf()

(1)或(2)结果都是8 8,  

        从右到左计算,再从左到右输出

(3)的结果8 9

2. i++,++i

(0)处的

*(ptr++) += 123;   等同于    *ptr=*ptr+123; ptr++;

若改成

*(++ptr) += 123;   等同于    *ptr=*ptr+123; ++ptr;

效果是一样的,都实现了ptr自增1,ptr指向7


若将代码改成

int main()
{
int b = 3;
int arr[] = { 6,7,8,9,10 };
int *ptr = arr;

// int *p = ptr++ ;  //(4)
// printf("%d", *p);

//      printf("%d", *ptr);


int *q = ++ptr; //(5)
printf("%d", *q);
printf("%d", *ptr);


system("pause");
       return 0;
}

(4)处, *p=6, *ptr=7

(5)处, *q=7,*ptr=7

相同的是:不管是 ptr++, ++ptr,ptr都自增1

不同的是:将ptr++, ++ptr赋给其他变量,其他变量值分前置/后置

<< primer C++>> 4.5节,(4)的p是后置版本 -- 得到递增之前的值

                                        (5)的q是前置版本 -- 得到递增之后的值


其他例子

(1) int n = 1;
cout << ++n <<' '<<n << endl;

结果 2 2

(2) int n=1;

cout << n++ << ' ' << n << endl;

结果 1 2

(3) int n=1;

cout << n << ' ' << n++ << endl;

结果 2 1

(4) int n=1;

cout << n << ' ' << ++n << endl;

结果 2 2



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值