自闭症康复网,内容丰富有趣,生活中的好帮手!
自闭症康复网 > *ptr++ *++ptr ++*ptr和(*ptr)++

*ptr++ *++ptr ++*ptr和(*ptr)++

时间:2021-02-19 09:25:40

相关推荐

*ptr++ *++ptr ++*ptr和(*ptr)++

*++ptr、++*ptr、*ptr++、和(*ptr)++

int num[] ={1,3,5,7,9};

int* ptr_num = num;

先看*++ptr,这个很容易看出来先对指针移位地址加1,然后取值结果应该是3

int num[] ={1,3,5,7,9};int* ptr_num = num;cout << *++ptr_num << endl;//输出为 3

然后++*ptr,先解引用再++,结果就是2,也就是原数组第一个值加1

int num[] ={1,3,5,7,9};int* ptr_num = num;cout << *++ptr_num << endl;//输出为 2

麻烦的是后++,先看*ptr++,*和++优先级是相同的,单目运算符应该是从右往左,但是这里正确的执行过程是先解引用取出指针指向的值,然后再将指针地址加1,指向下一个位置。所以就是取值移位不会修改数组中的值。即使是*(p++)结果也是和*p++一样的,主要是因为后加加操作的影响。

int num[] ={1,3,5,7,9};int* ptr_num = num;cout<<*ptr_num++<< " , "<<*ptr_num<<endl;//输出结果为 1 , 3

最后一个(*ptr)++ ,解引用取值再加1

int num[] ={1,3,5,7,9};int* ptr_num = num;cout<<(*ptr_num)++<< " , "<<num[0]<<endl;//输出结果为 1 , 2

输出结果是1,2,说明(*ptr)++修改了num[0]的值,但是后++ 是执行完之后在执行++所以先打印了*ptr_num的值,再执行加1操作,所以&ptr_num打印的是1.

在迭代循环取值的时候用*ptr++,不会改变原值大小,*++ptr会跳过第一个值,所以用*ptr++比较好。

太麻烦就定义个变量i,ptr+i怎么都不会错。

如果觉得《*ptr++ *++ptr ++*ptr和(*ptr)++》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。