求助C语言问题、、、

企椰子 2011-03-26 03:09:09
#include<stdio.h>
main()
{
int a[5]={1,9,16,18,20};
int *p=a;
printf("%d\n",*p);
printf("%d\n",*p++);//9
}

程序运行出来的结果是1,1。不应该是1,9吗?
...全文
138 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xfj66hh 2011-04-09
  • 打赏
  • 举报
回复
这个要根据不同的编译器而言,一般是1,1
有的编译器也会是1,9
hooha 2011-03-30
  • 打赏
  • 举报
回复
这种问题老谭的书中都讲过了,基础知识,先好好看看书。
陈思有 2011-03-30
  • 打赏
  • 举报
回复
在去看看书,彻底弄懂a++与++a的区别
*p++是先求*p的值,再将p的值加一
yuncommander 2011-03-30
  • 打赏
  • 举报
回复
不好意思哈,更改下:
++i 指的是在使用i之前,先使用i的值加1
--i 指的是在使用i之前,先使用i的值减1
i++ 指的是在使用i之后,使i的值加1
i-- 指的是在使用i之后,使i的值减1
举个例子:
当i = 3时,j=++i 指的是i的值先变成4,在赋给j,j的值为4
当i = 3时,j=i++ 指的是先将i的值3赋给j,j的值为3,然后i变为4
yuncommander 2011-03-30
  • 打赏
  • 举报
回复
++i 指的是在使用i之前,先使用i的值加1
--i 指的是在使用i之前,先使用i的值减1
i++ 指的是在使用i之后,先使用i的值加1
i-- 指的是在使用i之后,先使用i的值减1
举个例子:
当i = 3时,j=++i 指的是i的值先变成4,在赋给j,j的值为4
当i = 3时,j=i++ 指的是先将i的值3赋给j,j的值为3,然后i变为4
sonnno 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 anyidan 的回复:]

*p++

实际上,* 和 ++ 的优先级是相同的,此时需要利用“结合率”来判定 operand 与哪一个 operator 结合, 实际上这个优先级别的 operator 的结合率是从从右到左,因此

*p++ = *(p++)

根据“后置++”的定义,在本句中的 p 值不变,因此

*p++ 等价于 *p; p++; 两句
[/Quote]

++的优先级不是高于*吗?
davids_liu 2011-03-30
  • 打赏
  • 举报
回复
这位兄弟总结的卜错哈
[Quote=引用 10 楼 anyidan 的回复:]
*p++

实际上,* 和 ++ 的优先级是相同的,此时需要利用“结合率”来判定 operand 与哪一个 operator 结合, 实际上这个优先级别的 operator 的结合率是从从右到左,因此

*p++ = *(p++)

根据“后置++”的定义,在本句中的 p 值不变,因此

*p++ 等价于 *p; p++; 两句
[/Quote]
AnYidan 2011-03-26
  • 打赏
  • 举报
回复
*p++

实际上,* 和 ++ 的优先级是相同的,此时需要利用“结合率”来判定 operand 与哪一个 operator 结合, 实际上这个优先级别的 operator 的结合率是从从右到左,因此

*p++ = *(p++)

根据“后置++”的定义,在本句中的 p 值不变,因此

*p++ 等价于 *p; p++; 两句
hzc543806053 2011-03-26
  • 打赏
  • 举报
回复
#include<stdio.h>
main()
{
int a[5]={1,9,16,18,20};
int *p=a;
printf("%d\n",*p);
printf("%d\n",*p++);//9
}
因为*p++ 是完成这个程序后在加一 所以答案是 1 1
touda2 2011-03-26
  • 打赏
  • 举报
回复
++后缀是它先使用再加一。
LBJMD 2011-03-26
  • 打赏
  • 举报
回复
*p++ 此时结果还是指向数组的第一个元素,之后p才指向下一地址
c516917946 2011-03-26
  • 打赏
  • 举报
回复
第5行,char改成int
企椰子 2011-03-26
  • 打赏
  • 举报
回复
#include<stdio.h>
main()
{
int a[5]={1,9,16,18,20};
char *p=a;
p++;
printf("%d\n",*p);
}
为什么结果是零啊?不是指向下一个单位9了吗?
  • 打赏
  • 举报
回复

#include<stdio.h>
main()
{
int a[5]={1,9,16,18,20};
int *p = &a;
printf("%d\n",*p);
*p++;
printf("%d\n",*p);//9
}

無_1024 2011-03-26
  • 打赏
  • 举报
回复

#include<stdio.h>
main()
{
int a[5]={1,9,16,18,20};
int *p=a;
printf("%d\n",*p);
printf("%d\n",*(++p));//9
}

//p++与++p的顺序
bdmh 2011-03-26
  • 打赏
  • 举报
回复
printf("%d\n",*p);
printf("%d\n",*p++);//9
这两个结果一样的,第二个因为是后置++,所以等输出完了,才加一,改成前置++就可以
maoxing63570 2011-03-26
  • 打赏
  • 举报
回复
看看运算符优先级的问题去
p++先运算,但是正如i++一样,它返回的是还没有改变的值,所以你解引用后还是1

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧