|
蓝森林 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++)是一样的么?
稍微看点《编译原理》吧,就不会在这种廉价问题上浪费时间了。 |
| |