鱼C论坛

 找回密码
 立即注册
查看: 5675|回复: 28

第一次发贴求解!

  [复制链接]
发表于 2013-5-14 20:23:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int a[5] = {5,3,7,6,9}, *p;
p = &a;
printf ("%d\n", *p++);
printf ("%d\n", *p);

请问*p++是几次运算?
*和++运算符优先级一样,结合性是从右至左,都是单目运算符。如果*p++是两次运算的这样子看的话,应该是先将p指身数组下一个数组元素,然后取值;为什么打印出来结果却不是!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-14 21:04:24 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-14 21:42:48 | 显示全部楼层
p是一个指针,指向一个地址,a本来就代表数组的首地址,所以应该写为p=a;。为了防止此类错误,建议价括号。#include <stdio.h>
void main()
{

        int a[5]={5,3,7,6,9},*p;
        p=a;
        printf("%d\n",*p++);
        printf("%d\n",*p);
printf("\n");
}
C:\Documents and Settings\Administrator\桌面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-14 21:44:40 | 显示全部楼层

结果是,5,3截图没成功。后面*p++,你说的对,就是那样执行的。为了避免,建议你还是在后面加个小括号。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-14 21:47:59 | 显示全部楼层
指间的阳光 发表于 2013-5-14 21:44
结果是,5,3截图没成功。后面*p++,你说的对,就是那样执行的。为了避免,建议你还是在后面加个小括号。

你没回答我的问题。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-14 21:58:49 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-14 22:04:05 | 显示全部楼层
City_of_the_sky 发表于 2013-5-14 21:47
你没回答我的问题。。。

你的程序本身错误,还有就是你的问题实际上是没有把++运算符搞明白,虽然p++是指向了下一个元素的地址,但是当前P的指针还未改变,得到你要的结果应该写成*(++p)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-14 22:24:25 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-14 23:28:52 | 显示全部楼层
指间的阳光 发表于 2013-5-14 22:04
你的程序本身错误,还有就是你的问题实际上是没有把++运算符搞明白,虽然p++是指向了下一个元素的地址,但 ...

那P什么时候变的呢?是*P++这条语句完了再自增,不是执行printf()以后再自增呢?我想知道的是一条语句是以分号表示结束,那一个运算呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-14 23:51:13 | 显示全部楼层
*p++  不是一个 运算, 他是先  用*p  然后 才++的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-15 00:02:35 | 显示全部楼层
qiancheng 发表于 2013-5-14 23:51
*p++  不是一个 运算, 他是先  用*p  然后 才++的

你说的不对吧,去查下优先级的表!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 00:11:00 | 显示全部楼层
City_of_the_sky 发表于 2013-5-15 00:02
你说的不对吧,去查下优先级的表!

这个问题就 类似  int i,j=0;  i=j++;     是j先赋值,然后++。     
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 00:23:32 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 00:25:56 | 显示全部楼层
本帖最后由 厚积薄发chen 于 2013-5-15 00:27 编辑

p++中++为后继加,只有整个语句执行完之后才会对p加1++p中++就是前置加,先将p指向下一个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 08:28:52 | 显示全部楼层
*p++的“ * ”号在这里不是算术运算符所以输出*P后自增
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 09:51:40 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 10:01:44 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 10:26:27 | 显示全部楼层
qiancheng 发表于 2013-5-14 23:51
*p++  不是一个 运算, 他是先  用*p  然后 才++的

错误的说法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 10:47:08 | 显示全部楼层
City_of_the_sky 发表于 2013-5-14 23:28
那P什么时候变的呢?是*P++这条语句完了再自增,不是执行printf()以后再自增呢?我想知道的是一条语句是以 ...

那个式子执行完就自增了,但是是先执行的*p++,即系统先把*p++的值取出来,然后指针发生改变,最后才打印刚刚取出来的值。顺序是:先取值,后指针改变,分号结束当前语句打印第一步的值,。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-16 02:52:52 | 显示全部楼层
a1c2c3 发表于 2013-5-15 08:28
*p++的“ * ”号在这里不是算术运算符所以输出*P后自增

取值不算运算吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 05:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表