| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1426 人关注过本帖
标题:[求助]有关new操作符分配内存生成动态数组的
只看楼主 加入收藏
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
 问题点数:0 回复次数:8 
[求助]有关new操作符分配内存生成动态数组的
#include<iostream.h>
void move(int (*p)[3]);
void main()
{
int i,j;
int (*pointer)[3];
pointer=new int [3][3];
cout<<"请输入一个3×3的二维数组:"<<endl;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
*((*pointer+i)+j)=i*10+j;
cout<<"你输入的二维数组为:"<<endl;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
cout<<pointer[i][j]<<' ';
cout<<endl;
}
move(pointer);
cout<<"输出的一个二维数组是:"<<endl;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
cout<<pointer[i][j]<<' ';
cout<<endl;
}

}
void move(int (*p)[3])
{
int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<i;j++)
{t=*((*p+i)+j);
*((*p+i)+j)=*((*p+j)+i);
*((*p+j)+i)=t;
}
}
..............................
本程序完成的是转置矩阵的功能.....
编译的时候无错误,但程序运行的结果与事实不符。
麻烦哪位大虾看一下,不胜感激!!!!!
搜索更多相关主题的帖子: 操作符 内存 new 动态 
2006-04-13 13:16
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
收藏
得分:0 
pointer=new int [3][3];
肯定错了,new不能这样用,看我的书写的参考答案,第八章的最后一题里面有介绍怎么用new建立二维数组。程序代码也有。
要用到多级指针的。
2006-04-14 19:58
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 
比如int (*pointer)[3];
cin>>n;
pointer=new int [n][3];
应该这样的
2006-04-14 21:56
gototheworld
Rank: 1
等 级:新手上路
帖 子:218
专家分:0
注 册:2006-3-24
收藏
得分:0 
#include<iostream.h>
void move(int **p);
void main()
{
int i,j;
int **pointer;
pointer = new int *[3];
for(i = 0;i < 3;i++)
pointer[i] = new int[3];
cout<<"请输入一个3×3的二维数组:"<<endl;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
pointer[i][j]=i*10+j;
cout<<"你输入的二维数组为:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<pointer[i][j]<<' ';
cout<<endl;
}
move(pointer);
cout<<"输出的一个二维数组是:"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<pointer[i][j]<<' ';
cout<<endl;
}
for(i = 0;i < 3;i++)
delete []pointer[i];
delete []pointer;
}
void move(int **p)
{
int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<i;j++)
{
t=p[i][j];
p[i][j]=p[j][i];
p[j][i]=t;
}
}

路漫漫其修远兮 吾将上下而求索
2006-04-15 09:21
笨蛋呵呵
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-3-31
收藏
得分:0 
呵呵~~~
#include<iostream.h>
void move(int (*p)[3]);
void main()
{
int i,j;
int (*pointer)[3];
int n;
cin>>n;
pointer=new int [n][3];//不能pointer=new int [3][3];
cout<<"请输入一个3×3的二维数组:"<<endl;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
*(*(pointer+i)+j)=i*10+j;  //原来的为*((*pointer+i)+j)=i*10+j; *号位置错了
cout<<"你输入的二维数组为:"<<endl;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
cout<<pointer[i][j]<<' ';
cout<<endl;
}
move(pointer);
cout<<"输出的一个二维数组是:"<<endl;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
cout<<pointer[i][j]<<' ';
cout<<endl;
}

}
void move(int (*p)[3])
{
int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<i;j++)
{t=*(*(p+i)+j);
*(*(p+i)+j)=*(*(p+j)+i);
*(*(p+j)+i)=t; //*号问题
}
}

[此贴子已经被作者于2006-4-15 12:24:51编辑过]

2006-04-15 12:24
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

哦,对了。是这样的.....
这个稍微一马虎就出错了..
但我看见c++的书用new来定义一个三维的动态数组是这样定义的:
float (*p)[9][8];
p=new float[8][9][8];
这是为什么呀???


英者自知,雄者自胜
2006-04-15 14:16
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
收藏
得分:0 
以下是引用静思在2006-4-15 14:16:00的发言:

哦,对了。是这样的.....
这个稍微一马虎就出错了..
但我看见c++的书用new来定义一个三维的动态数组是这样定义的:
float (*p)[9][8];
p=new float[8][9][8];
这是为什么呀???

肯定是某大学教授想当然的作品……程序都不上机实践的……
没有什么编译器可以允许new float[8][9][8]的

2006-04-16 13:40
hahahy
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-4-8
收藏
得分:0 
以下是引用p1s在2006-4-16 13:40:00的发言:

肯定是某大学教授想当然的作品……程序都不上机实践的……
没有什么编译器可以允许new float[8][9][8]的

希望能解释一下为什么...
不是几个几重指针就能建立几重数组吗?
比如:
*p---p[i]
**p---p[i][j];
***p---p[i][j][k]
.......
不明白~

2006-04-17 09:20
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
收藏
得分:0 
但是new 类型只能在后面有一个中括号啊,不能有多个的写法。
*p---p[i]
**p---p[i][j];
***p---p[i][j][k]
这些理论上是没有错的,他们的实质的确是多级指针。但是new int[3][2][3]这种写法就是错误的,在于new不支持这样的写法。
2006-04-17 18:53
快速回复:[求助]有关new操作符分配内存生成动态数组的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016163 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved