打印

C语言基础知识问下

[复制链接]
1081|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuoulyy|  楼主 | 2013-9-28 10:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#defineMIN(A,B)((A)<=(B))?(A):(B)

intmain(void)

{ inta[10]={0,1,2,3,4,5,6,7,8,9};

 int*p=a;

 printf("%d\n",MIN(*(p++),9));//a=0送给指针P,P++为1,1的指向地址的数为1

 printf("%d\n",MIN(*(p++),9));//a=1送给指针P,P++为2,2的指向地址也是为2啊,为何变3了?

 printf("%d\n",MIN(*(p++),9));

 printf("%d\n",MIN(*(p++),9));

 printf("%d\n",MIN(*(p++),9));

 return0;

}

函数结果

13579

相关帖子

沙发
xlsbz| | 2013-9-28 12:17 | 只看该作者
MIN(A,B)((A)<=(B))?(A)B)

如果是初学者 可以学学这个语句。
如果是学过一段时间 可以忘记这个语句了。没啥用。

另外 宏定义搞这么个函数 更是不好。容易出问题

使用特权

评论回复
板凳
ayb_ice| | 2013-9-28 13:53 | 只看该作者
A>B就取值A,否则取B

宏执行效率高

使用特权

评论回复
地板
很忙| | 2013-9-28 15:42 | 只看该作者
#define叫做预处理,预处理的意思是在编译之前就直接替换到代码里面,编译的时候其实编译的是预处理之后的值。这点很关键,也是很多初学者疑惑的地方,发现很多C语言编程的书里面都没有解释这个知识点。明白了这点,你的代码编译的其实是这样的:
printf("%d\n",(*(p++)<=9)? *(p++) : 9);
printf("%d\n",(*(p++)<=9)? *(p++) : 9);
printf("%d\n",(*(p++)<=9)? *(p++) : 9);
printf("%d\n",(*(p++)<=9)? *(p++) : 9);
printf("%d\n",(*(p++)<=9)? *(p++) : 9);

那自己就可以明白为什么输出的是这样子的了。

使用特权

评论回复
5
liuoulyy|  楼主 | 2013-9-29 15:50 | 只看该作者
说到点上了,谢谢

使用特权

评论回复
6
ballack_linux| | 2013-9-29 17:28 | 只看该作者
4楼正解

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

472

帖子

1

粉丝