指针运算拾遗 ||

指针运算拾遗 ||

一、题目
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
请按任意键继续. . .
*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值