蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年6月6日 10:18


*ptr++ 和 *(ptr++)是一样的么?

请对比以下两个简单的程序

第一个:
#include <stdio.h>;
void main()
{
        char* ptr = "csdn";
        printf("%c\n",*(ptr++));
}
结果是
[guest@xielong guest]$ ./test3
c

第二个:
#include <stdio.h>;
void main()
{
        char* ptr = "csdn";
        printf("%c\n",*ptr++);
}
结果是
[guest@xielong guest]$ ./test4
c
这样的话 *ptr++ 和 *(ptr++) 一样 ?

*ptr++ 和 *(ptr++)是一样的么?

类似的问题好像讨论了很多,察看历史纪录就找到了你的答案

*ptr++ 和 *(ptr++)是一样的么?

就是一样的。

*ptr++ 和 *(ptr++)是一样的么?

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

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

但是我用了printf("the ++(*Ptr) is %d\n", ++(*ptr));
为什么会出现Segmentation fault错误呢?
如果我用char  ch  = *ptr;
printf("the ch is %d\n", ++a);就可以呢??

*ptr++ 和 *(ptr++)是一样的么?

*ptr++ 和 *(ptr++)是一样的么?

UP一下
希望高手回答!

*ptr++ 和 *(ptr++)是一样的么?

如果是
printf("%c\n",++ptr);
ptr先自加1,再打出的是地址来

*ptr++ 和 *(ptr++)是一样的么?

-->
你这样子当然打出来的是地址了。
你上面的情况下两者是一样子的,不仿运行一下这个,
  [code]include <stdio.h>;
void main()
{
char* ptr = "csdn";
whlie(*ptr)
printf("%c\n",*(ptr++));
} [/code]
这样你就可以清楚的看到你要的全部结果!![/code]

*ptr++ 和 *(ptr++)是一样的么?

不!++与*的优先级一样,只是结合方式决定的

*ptr++ 和 *(ptr++)是一样的么?

*ptr++ 和 *(ptr++)是一样的么?

其实* 与++的优先级是一样的
在*和++同时出现的情况下依据从右到左的原则
但ptr++又先做在加一 . 所以
*ptr++ 的意思是先取ptr的指针值,然后在指针值后移指向下个元素
但*ptr++的结果还是*ptr 只有到下个循环是*ptr的值才是后个元素

*ptr++ 和 *(ptr++)是一样的么?

加个括号
这样以后分析维护代码时就清楚多了
不用再费神想想是什么意思

但是还是要感谢楼主的钻研精神
我会把这个添加到FAQ中的

*ptr++ 和 *(ptr++)是一样的么?

老谭的c语言教程那本书说得很清楚

*ptr++和*(ptr++)完全等价,*与++的优先级别一样,结合方式从右到左,所以两者完全等同!!先取ptr指向的变量值,然后再自加1

*ptr++ 和 *(ptr++)是一样的么?

稍微看点《编译原理》吧,就不会在这种廉价问题上浪费时间了。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com