《程序员面试宝典》的题目
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