真没见过你这么喜欢争吵的人。
既然kai来了,我就把事情经过说清楚吧。
首先有人要问:如何动态存储2维数组。
我回答的思想是:
1、用1级指针。
2、用指针数组。
由于大家都是C++的,所以我的回答或许草率了点,让C的人没能一眼看出来。
我开始的回答是(假设已经定义了数组int arr[m][n],里面已经有内容了。):
int*p;
p=arr;这里我犯了错误,2维数组的首位置不能这样表示,应该是*arr或者&arr[0][0];
这里只是靠这个指针遍历数组。
而我只是用这种思想,所以没有很具体的说明。
由于穆羊的的指责(他却说要int(*p)[m])
首先我没反对他这样说是错的,但是并不是只有一中方法的。
所以由于他的职责,我把详细的代码写下:
int*p=new int[m*n];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
p[i*m+n]=arr[i][j];
然后是第二种方法:
int*p[m];
for(int i=0;i<m;i++)
p[i]=new int[n];
for(int j=0;j<m;j++)
for(int k=0;k<n;k++)
p[j][k]=arr[j][k];
他却说错了。
我也同样不理解。
再来说一下,new int;函数的确返回void*,但是编译器会因为new函数后面的int而把void*转换为int*.
我来说明理由:
要知道C++是不允许下面的操作的:
void*p=new int(5);
cout<<*p<<endl;//不允许对void类型输出。
然而你再换下看:
cout<<*(new int(5))<<endl;
这就很明显了。
我之所以删除帖子,我相信近来看过我们争论的人都心里清楚,我也是觉得和你吵下去没意思。
你既然指出别人的错误,就是希望互相进步,我自然也很高兴,就在你的第一个帖子的说我荒唐的时候,我就带着好奇,因为我以为我有哪里一直都误解了。
所以我说话的语气一直都比较随意,但是你似乎就象是以为自己抓到把柄般的说什么“版主错了代码还丢风度~!?”
难道对不清楚的东西好奇是怕丢风度?
因为我一只认为指针这东西,我还算是比较清楚的,结果一直的争论是没必要的。本来选择沉底算了,结果被你翻上来,所以才选择删除,因为这样老是做些无聊的争吵,而不是有礼貌的,有修养的探讨(用“瞧不起你”什么的语言中伤他人)。
我怕影响他人。既然你又在这个帖子上继续探讨,就请语言尊重点。和气探讨就好,不要火药味这么浓。