鱼C论坛

 找回密码
 立即注册
查看: 3013|回复: 4

关于零基础学习C第九章宏的问题!头快想炸了!!

[复制链接]
发表于 2012-1-4 14:04:15 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

void main()
{
  int i = 1;
  int SQ(int y);

  while(i<=5)
  {
     printf("%d\n",SQ(i++));
  }
}

int SQ(int y)
{
  return ((y)*(y));
}
上面这个是用函数来调用的,值是正确的 ,1,4,9,16,25.

#include <stdio.h>

#define SQ(y) ((y)*(y))

void main()
{
  int i = 1;

  while (i<=5)
  {
     printf("%d\n",SQ(i++));
  }
}

这个是用宏,但是结果却是 ,1,9,25.  

宏的值,也是每次加1啊 ,为什么会错呢,难道每用一次宏,就隔一次才能用宏?,
求解大牛们
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-4 17:41:45 | 显示全部楼层
原来如此
{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-1-4 20:45:29 | 显示全部楼层

谢谢这位大大,刚才我按这
#include <stdio.h>

void main()
{
   int i=1;
   while(i<=5)
   {
     printf("%d\n",(i++)*(i++));
   }
}
单步调试了下,原来,两次i++就把i加2了,1+2=3,3+2=5;难怪会那样,谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-4 21:40:29 | 显示全部楼层
这个是优先级的问题吧。。。 printf("%d\n",(i++)*(i++));
每次先i相乘,然后输出结果,最后i++ ,再i++,然后进入下一次循环
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-1-10 02:07:59 | 显示全部楼层
学到了!呵呵 刚开始也迷糊了
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-10 16:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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