赞
踩
p是一个指针,p++,*p++,(*p)++,*(p++)
这四个加到底是加在地址上还是加在值上呢?直接上测试代码我们看:
#define SELPLUS //#define PLUS //#define MINUS //#define MULTIPLY //#define DIVID int buf1[5] = { 1, 3, 5, 7, 9}; int buf2[5] = { 1, 3, 5, 7, 9}; int buf3[5] = { 1, 3, 5, 7, 9}; int buf4[5] = { 1, 3, 5, 7, 9}; int *p1 = NULL; int *p2 = NULL; int *p3 = NULL; int *p4 = NULL; p1 = &buf1[1]; p2 = &buf2[1]; p3 = &buf3[1]; p4 = &buf4[1]; #ifdef SELPLUS p1++; *p2++; (*p3)++; *(p4++); #endif #ifdef PLUS p1=p1+1; *p2=*p2+1; *p3=(*p3)+1; *p4=*(p4+1); #endif #ifdef MINUS p1=p1-1; *p2=*p2-1; *p3=(*p3)-1; *p4=*(p4-1); #endif #ifdef MULTIPLY *p2=*p2*2; *p3=(*p3)*2; #endif #ifdef DIVID *p2=*p2/2; *p3=(*p3)/2; #endif cout << *p1 << endl; cout << *p2 << endl; cout << *p3 << endl; cout << *p4 << endl; system("pause");
结果上图:
结果很明显
p++,*p++,*(p++)
是在p所指向的地址上+1
(*p)++
是在p所指向的数据上+1
同理,再接着测试加减乘除(对地址直接乘除非法,所以乘除只测试两种),分别得到以下结果:
结论如下:
加法(同减):
p+1,*(p+1)
是对p指向的地址+1
*p+1,(*p)+1
是对p指向的数据+1
乘法(同除):
*p*2,(*p)*2
都是对p指向的数据×2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。