指针运算拾遗 ||
一、题目
1、*++p;
2、++*p;
3、*p++;
4、(*p)++;
5、++*++p;
6、++*p++;
二、分析
1、*++p;
相当于 *(++p);
2、++*p;
相当于 ++(*p); 即 *p = *p + 1;
3、*p++;
相当于 *(p++);
4、(*p)++;
就是本身的意思, 注意区分 *p++; 与 (*p)++;
5、++*++p;
相当于 ++(*(++p));
6、++*p++;
相当于 ++(*(p++));
三、验证代码
int a[] = { 10, 20, 30, 40, 50 };
int n = sizeof(a) / sizeof(a[0]);
int *p = a;
cout << *p++ << "\t" << *p << endl; // *p++ : 即 *(p++), 相当于两步操作: 第一步: p++; 第二步: *p;
disp(a, n);
int *p1 = a;
cout << ++*p1 << "\t" << *p1 << endl; // ++*p1 : 即 ++(*p1), 即: *p1 = (*p1) + 1;
disp(a, n);
int b[] = { 10, 20, 30, 40, 50 };
int n2 = sizeof(b) / sizeof(b[0]);
int *p2 = b;
cout << (*p2)++ << "\t" << *p2 << endl;
disp(b, n2);
int c[] = { 10, 20, 30, 40, 50 };
int n3 = sizeof(c) / sizeof(c[0]);
int *p3 = c;
cout << ++*++p3 << "\t" << *p3 << endl;//21 21
//++*++p3: ++(*(++p3))
//(1):++p3,p3指向了a[1],
//(2):*(++p3),取a[1]中的值,20
//(3):++(*(++p3)),对a[1]中的值进行自加1,21
disp(c, n3);
int d[] = { 10, 20, 30, 40, 50 };
int n4 = sizeof(d) / sizeof(d[0]);
int *p4 = d;
cout << ++*p4++ << "\t" << *p4 << endl;//11 20
// ++*p4++ : ++(*(p4++))
//(1) p4++,该表达式结束后,指针p4指向a[1](数组a当前位置的下一个位置),在该表达式中,p4仍指向当前位置a[0]
//(2) *(p4++),取a[0]中的值,10
//(3) ++(*(p4++)),对a[0]中的值进行自加1操作,11
//到第二个 *p4, 取p4指针所指地址中的值时,p4就指向了a[1], *p4,就是取a[1]中的值,20
disp(d, n4);
}
/*
10 20
10 20 30 40 50
11 11
11 20 30 40 50
10 11
11 20 30 40 50
21 21
10 21 30 40 50
11 20
11 20 30 40 50
请按任意键继续. . .
*/