之前一直想不明白这道题,听说是某公司招程序员的考试题目
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7 };
int *p = arr;
*(p++)+=89;//等同于*(p)=*(p++)+89;
int arr2[] = { 1, 2, 3, 4, 5, 6, 7 };
int *q = arr2;
*(++q)+=89;//等同于*(q)=*(++q)+89;
printf("\*p的值%d,%d,%d,%d,%d\n", *p,arr[0],arr[1],arr[2],arr[3],arr[4]);
printf("\*q的值%d,%d,%d,%d,%d\n", *q,arr2[0],arr2[1],arr2[2],arr2[3],arr2[4]);
printf("\*p的值%d,\*(p++)的值%d\n", *p, *(++p));
printf("\*q的值%d,\*(p++)的值%d\n", *q, *(++q));
system("pause");
return 0;
}
先不要看我的注释,你能不能独立做出来
答完了看答案
我先下结论,在等式的左边的值一定要是个定值,大家都知道等式运算是从右往左运算,所以我说的定值是当从右往左运算是,p或者q的数值确定下来了
*(p++)+=89;//等同于*(p)=*(p++)+89;
p++是后加所以等式运算完后在p++,加加一次
反正等式的左边一定是定值,就是不会有++,--,的,提前是要把等式展开
不要以为*(p++)+=89;//等同于*(p++)=*(p++)+89;加