1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > c语言*p和**p c语言分析(*p)++和*p++的不同含义

c语言*p和**p c语言分析(*p)++和*p++的不同含义

时间:2024-01-27 18:37:15

相关推荐

c语言*p和**p c语言分析(*p)++和*p++的不同含义

其实是这样的,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)。

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