+ -
当前位置:首页 → 问答吧 → 初学c,请问:anytype *p_str, p_str++与 *p_str++有啥不同呢?

初学c,请问:anytype *p_str, p_str++与 *p_str++有啥不同呢?

时间:2010-08-13

来源:互联网

本帖最后由 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;
复制代码
纯粹是兴趣,不是抢饭碗的,也没能力抢啊。

作者: cu养猪小能手   发布时间: 2010-08-13

p_str++与 *p_str++ 结果一样?

作者: evaspring   发布时间: 2010-08-13

因为“++”的优先级比“*"要高,所以结果式相同的。

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

作者: evaspring   发布时间: 2010-08-13

char *p;

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

作者: pandaiam   发布时间: 2010-08-13

回复 evaspring


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

作者: cu养猪小能手   发布时间: 2010-08-13

回复 pandaiam


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

作者: cu养猪小能手   发布时间: 2010-08-13

回复 cu养猪小能手


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

作者: liuyuanyang   发布时间: 2010-08-13



QUOTE:
因为“++”的优先级比“*"要高,所以结果式相同的。

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

回复 evaspring

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

作者: cu养猪小能手   发布时间: 2010-08-13

这里写成 p_str++ 比较好,意思也容易明白。

作者: pandaiam   发布时间: 2010-08-13

回复 liuyuanyang


    谢谢啦,应该是这样了。怪不得有个这样的提示:
test.c:13:1: 警告:返回类型默认为‘int’
test.c: 在函数‘main’中:
test.c:17:25: 警告:计算出的值未被使用

作者: cu养猪小能手   发布时间: 2010-08-13

回复 pandaiam



QUOTE:
这里写成 p_str++ 比较好,意思也容易明白。
pandaiam 发表于 2010-08-13 23:06




    嗯,谢谢了。

作者: cu养猪小能手   发布时间: 2010-08-13