一个指向对象数组指针的问题

lxencs 2003-08-18 10:49:25
以下是清华大学出版社吕凤翥著《C++语言基础教程》中的例子:
#include<iostream.h>
class M
{
public:
M() {a=b=0;}
M(int i,int j){a=i;b=j;}
void print(){cout<<a<<","<<b<<endl;}
private:
int a,b;
};
void main()
{
M m[2][4];
int x=10,y=10;
for(int i=0;i<2;i++)
for(int j=0;j<4;j++)
m[i][j]=M(i+=2,j+=10);
M(*pm)[4](m);
for(i=0;i<2;i++)
{
cout<<endl;
for(int j=0;j<4;j++)
(*(*(pm+i)+j)).print();
}
cout<<endl;
}

其答案为
12.20 14.30 16.40 18.50
20.60 22.70 24.80 26.90
但实际执行结果为
0,0
0,0
0,0
0,0

0,0
0,0
0,0
0,0
问题出在哪里?
















...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
西江残月 2003-08-19
  • 打赏
  • 举报
回复
这帮教授又在卖弄自己德表达式功夫了!烦!
不就是输出m[2][4]吗!搞的这么复杂!
西江残月 2003-08-19
  • 打赏
  • 举报
回复
m[i][j]=M(i+=2,j+=10);
上面那句改为m[i][j]=M(x+=2,y+=10);就对了
sevecol 2003-08-19
  • 打赏
  • 举报
回复
M(*pm)[4](m);
等价于
M (*pm)[4]=m;
widewave 2003-08-19
  • 打赏
  • 举报
回复
m[i][j]=M(i+=2,j+=10); // 在循环里面改变循环变量的值
改成
m[i][j]=M(i+2,j+10);
andyone11 2003-08-18
  • 打赏
  • 举报
回复
请问::
M(*pm)[4](m);
是什么意思啊??,我到现在还没有见过这种形式的
谢谢了
sevecol 2003-08-18
  • 打赏
  • 举报
回复
应该就是
0,0
0,0
0,0
0,0

0,0
0,0
0,0
0,0

因为你的
m[i][j]=M(i+=2,j+=10);
第一次执行的时候等式的右边已经将i变成了2,j变成了10,也就是说直接给m[2][10]调用operator=,而你的m[2][4]根本就没有改变.所以都是0(因为default构造函数设置成0)

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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