赞
踩
其实是这样的,p储存的是地址,*p代表这个地址储存的值。p++是指地址的自增,(*p)++表示地址储存的值的自增。按顺序走。int *p=a;数组名表示地址,这句话的含义是定义一个指针p并将数组a的首地址赋值给pprintf("%d,",*p);现在p的值为数组a的首地址,*p表示a数组中第一个元素printf("%d,",*(++p));先将地址自增,再*p,此时p储存的为数组中第二个元素的地址,*p即表示数组中第二个元素的值(也就是2)printf("%d,",(*p)++);此时p储存的为数组中第二个元素的地址,先*p再使这个地址储存的值自增(也就是先输出2再把2自增),在这个过程中p储存的地址没有变化,不过数组中第二个元素已经由2变为了3。即数组a为{1, 3, 3, 4, 5}printf("%d,",*p);此时p储存的为数组中第二个元素的地址,*p,输出此地址储存的值,输出数组中第二个元素的值(也就是3)printf("%d,",*p--);根据符号结合顺序,*p--其实可以写作*(p--),因为是右自减,所以先*p再自减(这个自减指的是p的自减,也就是地址的自减)。*p时输出数组中第二个元素的值(也就是3),p自减后p中储存的值变为数组中第一个元素的地址(即数组首地址)。printf("%d,",--(*p));因为是左自减,所以先自减再*p。这个自减指的是*p(即p中储存的地址所对应的值)的自减,自减后数组a中第一个元素由1变为0,*p输出0。此时数组a为{0, 3, 3, 4, 5}怕你搞混,在此说一下。*(p--) 指的是先输出地址所对应的值,然后地址本身自减(在数组中前移1位)(*p)-- 指的是先输出地址所对应的值,再把这个值自减(没有地址的增减,即没有移位)--(*p) 指的是先把地址对应的值自减,在输出这个值(没有地址的增减,即没有移位)*(--p) 指的是先地址本身自减(在数组中前移1位),然后输出自减后的地址所对应的值希望能区分开。继续。printf("%d\n",*p);指输出此时地址所对应的值,也就是第一个元素的值(即0)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。