免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4280 | 回复: 14
打印 上一主题 下一主题

[C] 初学c,请问:anytype *p_str, p_str++与 *p_str++有啥不同呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-13 22:29 |只看该作者 |倒序浏览
本帖最后由 cu养猪小能手 于 2010-08-13 22:55 编辑

在一段小代码里面更换二者结果一样。
  1. #include "stdio.h"

  2. main()  {

  3.     char *p_str = "just to see if it works";

  4.     for(;*p_str != '\0';      p_str++  )
  5.         printf("%c\n",*p_str);

  6.     return 0;
  7. }
复制代码
  1. main()  {

  2.     char *p_str = "just to see if it works";

  3.     for(;*p_str != '\0';      *p_str++   )
  4.         printf("%c\n",*p_str);

  5.     return 0;
复制代码
纯粹是兴趣,不是抢饭碗的,也没能力抢啊。

论坛徽章:
26
处女座
日期:2016-04-18 14:00:4515-16赛季CBA联赛之深圳
日期:2020-06-02 10:10:5015-16赛季CBA联赛之广夏
日期:2019-07-23 16:59:452016科比退役纪念章
日期:2019-06-26 16:59:1315-16赛季CBA联赛之天津
日期:2019-05-28 14:25:1915-16赛季CBA联赛之青岛
日期:2019-05-16 10:14:082016科比退役纪念章
日期:2019-01-11 14:44:062016科比退役纪念章
日期:2018-07-18 16:17:4015-16赛季CBA联赛之上海
日期:2017-08-22 18:18:5515-16赛季CBA联赛之江苏
日期:2017-08-04 17:00:4715-16赛季CBA联赛之佛山
日期:2017-02-20 18:21:1315-16赛季CBA联赛之天津
日期:2016-12-12 10:44:23
2 [报告]
发表于 2010-08-13 22:37 |只看该作者
p_str++与 *p_str++ 结果一样?

论坛徽章:
26
处女座
日期:2016-04-18 14:00:4515-16赛季CBA联赛之深圳
日期:2020-06-02 10:10:5015-16赛季CBA联赛之广夏
日期:2019-07-23 16:59:452016科比退役纪念章
日期:2019-06-26 16:59:1315-16赛季CBA联赛之天津
日期:2019-05-28 14:25:1915-16赛季CBA联赛之青岛
日期:2019-05-16 10:14:082016科比退役纪念章
日期:2019-01-11 14:44:062016科比退役纪念章
日期:2018-07-18 16:17:4015-16赛季CBA联赛之上海
日期:2017-08-22 18:18:5515-16赛季CBA联赛之江苏
日期:2017-08-04 17:00:4715-16赛季CBA联赛之佛山
日期:2017-02-20 18:21:1315-16赛季CBA联赛之天津
日期:2016-12-12 10:44:23
3 [报告]
发表于 2010-08-13 22:41 |只看该作者
因为“++”的优先级比“*"要高,所以结果式相同的。

就算不考虑优先级的问题。
*ptr++  因为++返回的值还是原来的*ptr
*(ptr++)因为返回的ptr的地址,所以取值还是相同的。

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
4 [报告]
发表于 2010-08-13 22:46 |只看该作者
char *p;

p++ 的值是一个地址
*p++的值是从这个地址存储的东西。

论坛徽章:
0
5 [报告]
发表于 2010-08-13 22:52 |只看该作者
回复 2# evaspring


    在for里面把p_str改成*p_str结果是一样的

论坛徽章:
0
6 [报告]
发表于 2010-08-13 22:58 |只看该作者
回复 4# pandaiam


    嗯,这个我也知道,只是因为在上面两段代码的for的第三个分号前  p_str 和  *p_str效果一样,感到不解

论坛徽章:
0
7 [报告]
发表于 2010-08-13 23:04 |只看该作者
回复 6# cu养猪小能手


    for循环里用到的只是 指针的移动,并没有用到指针具体指向的值,*p_str++虽然有取值,但是作为for语句的第三个表达式,其表达式的结果是p_str指向的值,但循环中没用到这个值。就是这样的。。。

论坛徽章:
0
8 [报告]
发表于 2010-08-13 23:04 |只看该作者
因为“++”的优先级比“*"要高,所以结果式相同的。

就算不考虑优先级的问题。
*ptr++  因为++返回的值还是原来的*ptr
*(ptr++)因为返回的ptr的地址,所以取值还是相同的。
回复 3# evaspring

这个    *ptr++返回的不是原来的  *ptr了呃。。。如果  char *ptr = "just do it"; 经过若干个 *ptr++后,printf("%s",ptr)打印出来的就不再是  just do it 了。

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
9 [报告]
发表于 2010-08-13 23:06 |只看该作者
这里写成 p_str++ 比较好,意思也容易明白。

论坛徽章:
0
10 [报告]
发表于 2010-08-13 23:07 |只看该作者
回复 7# liuyuanyang


    谢谢啦,应该是这样了。怪不得有个这样的提示:
test.c:13:1: 警告:返回类型默认为‘int’
test.c: 在函数‘main’中:
test.c:17:25: 警告:计算出的值未被使用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP