为什么output是"elem_cnt : 5 expecting:10"? 请详细讲解一下.

hzhang4 2002-04-30 01:04:37
#include <iostream.h>

#define min(a, b) ((a) < (b) ? (a) : (b))

const int size = 10;
int ia[size];

main() {
int elem_cnt = 0;
int *p = &ia[0];

while (min(p++, &ia[size]) != &ia[size])
++elem_cnt;

cout << "elem_cnt : " << elem_cnt
<< "\texpecting: " << size << endl;
return 0;
}



...全文
44 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandwish2000 2002-04-30
  • 打赏
  • 举报
回复
以上两个答案都为10,可见是你在#define时系统p++作用与你所期望的不同.
在你的程序中,p++实际在调用时做了2次,因为#define是原样替换,所以调用时
变为((p++) < (&ia[size]) ? (p++) : (&ia[size]))
当p++小时,做了两次p++.所以为5.
sandwish2000 2002-04-30
  • 打赏
  • 举报
回复
#include <iostream.h>



const int size = 10;
int ia[size];

int * mymin(int *a,int *b)
{
return a < b ? a : b;
}

main() {
int elem_cnt = 0;
int *p = &ia[0];

for (int i=0;i<=9;i++,p++)
cout<<p<<endl;
cout<<"end p"<<endl;

for (i=0;i<=9;i++)
cout<<&ia[i]<<endl;
cout<<"end ia"<<endl;

p=&ia[0];

while (mymin(p++, &ia[size]) != &ia[size]){
//p++;
cout<<p<<endl;
++elem_cnt;
}

cout<<&ia[size]<<endl;
cout << "elem_cnt : " << elem_cnt
<< "\texpecting: " << size << endl;
return 0;
}
sandwish2000 2002-04-30
  • 打赏
  • 举报
回复
#include <iostream.h>

#define min(a, b) ((a) < (b) ? (a) : (b))

const int size = 10;
int ia[size];

main() {
int elem_cnt = 0;
int *p = &ia[0];

for (int i=0;i<=9;i++,p++)
cout<<p<<endl;
cout<<"end p"<<endl;
for (i=0;i<=9;i++)
cout<<&ia[i]<<endl;
cout<<"end ia"<<endl;
p=&ia[0];

while (min(p, &ia[size]) != &ia[size]){
p++;
cout<<p<<endl;
++elem_cnt;
}
cout<<&ia[size]<<endl;
cout << "elem_cnt : " << elem_cnt
<< "\texpecting: " << size << endl;
return 0;
}

70,020

社区成员

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

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