注册 登录
编程论坛 新人交流区

*p++的问题

mebol 发布于 2007-10-07 13:03, 765 次点击

我是刚接触C语言的新手哦,还请大家老手多多关照:
我学习的过程中遇到一个新问题:在指针中 *p++究竟是先算*p,再算++;还是先算p++,再算*?
拜托有人能理我,告诉我答案,我将非常的感谢!呵呵

19 回复
#2
yushui2007-10-07 13:11
*号的优先级高于+
#3
mebol2007-10-07 13:31

谢谢,我在清华大学出版的书上又看到说是++的优先级高于*,它说要这样算必须(*p)++,是怎么回事啊?是不是版本不一样?

#4
yushui2007-10-07 13:35
不会吧 书的版本是不一样  用程序试试不就知道了  呵呵
#5
mebol2007-10-07 13:38
  可我没安程序,我看了一下,安装都要交费,我已经很穷了,哪还经的起折腾
#6
nuciewth2007-10-07 13:43
++ 比* 高.
水水不要误导人家.
#7
mebol2007-10-07 13:49

可:
main()
{char s[]="159",*p;
p=s;
printf("%c",*p++);
printf("%c",*p++);
}结果是?
这是在电子工业出版社的出版书上抄的,我就觉得答案该是:59

#8
nuciewth2007-10-07 13:52
呵呵
应该是15,
printf("%c",*p++);//p->a[0]所以是1,之后p->a[1]
printf("%c",*p++);//同理
#9
mebol2007-10-07 14:03
哦,终于明白了
你的意思是第一次*p++时,p++的表达式植没变,所以输出是1,对吗?明白了
谢谢啊,你好厉害
#10
nuciewth2007-10-07 14:04
p++不会改变*p.
#11
mebol2007-10-07 14:10
哦,再请教一个问题:对于长度为n的线性表,在最坏情况下,需要比较的次数,快速排序与冒泡排序次数一样吗?
公式:n(n-1)/2 ? 堆排序是什么意思?
#12
nuciewth2007-10-07 14:14
快速排序当然要比冒泡排序快了.
快速是O(n*LOGn),而冒泡是O(n^2)

堆排序是以二叉树的形式来记录两两比较的结果.
#13
huxs2007-10-07 14:26
O(n*LOGn),O(n^2)这两个是什么意思呢?为什么前一个就比后一个快呢??
#14
nuciewth2007-10-07 14:29
以2为底的n的对数当然要比n小了.
#15
succubus2007-10-07 16:28
2楼的不要误导人啊
6楼也说错了
*和++的运算符优先级相同
但是它们需要按照从右往左的顺序来结合
所以*p++相当于*(p++)
后面回复的基本正确了
#16
forever44442007-10-07 17:13
这种东西最好实践一下。c-free3.5不是可以免费用吗?哪里有必要交钱啊。
#17
nuciewth2007-10-07 18:16
以下是引用succubus在2007-10-7 16:28:00的发言:
2楼的不要误导人啊
6楼也说错了
*和++的运算符优先级相同
但是它们需要按照从右往左的顺序来结合
所以*p++相当于*(p++)
后面回复的基本正确了

那你为什么还说*p++相当于*(p++)

#18
wolf7772007-10-07 21:06
c中,++和*优先级相同,结合方向为自右至左,*p++等价于*(p++)。作用是先得到*p的值,后p+1->p。
#19
nuciewth2007-10-07 21:52
谢谢succubus和wolf777两位
看来我得去看看书啦.
我只知道先++再*.没细看是因为结合问题.
我错了.再次感谢两位.
#20
xiaodao11o2007-10-07 21:59
大家都说了那么多了  我就不说了 18楼的 应该是对的
1