一个向函数传递数组参数的问题,急!

banzhiyu 2007-04-18 09:02:04
首先我定义了一个函数:
void MatrixChain(int *p,int n,int **m,int **s)
{
......
}
之后我又动态申请了二维数组:
int *c=new int [n];
int (*a)[n]=new int [n][n];
int (*b)[n]=new int [n][n];
下面我想传参给函数:
MatrixChain(c,n,a,b);出现错误了,请大家指示该如何传递呢
...全文
314 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
asdf511 2007-04-19
  • 打赏
  • 举报
回复
函数的参数形式可以不变,改变二维数组的申请
int *c=new int [n];
int **a,**b;
a=new int*[n];
b=new int*[n];
for(int i=0;i<n;i++)
{
a[i]=new int[n];
b[i]=new int[n];
}
MatrixChain(c,n,a,b);
www_adintr_com 2007-04-18
  • 打赏
  • 举报
回复
怎么不行? 报什么错?什么编译器?
banzhiyu 2007-04-18
  • 打赏
  • 举报
回复
To adlay(www.adintr.com)(无可奈何天):
我也有这样改过,还是不行,不知道为何,哎!
freshui 2007-04-18
  • 打赏
  • 举报
回复

给你一个东西, 牢记啊:

a) 一个整型数(An integer)
b)一个指向整型数的指针( A pointer to an integer)
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to
an intege)r
d)一个有10个整型数的数组( An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to
integers)
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a func
tion that takes an integer as an argument and returns an integer)
h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
( An array of ten pointers to functions that take an integer argument and retur
n an integer )

答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument an
d returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integ
er argument and return an integer
www_adintr_com 2007-04-18
  • 打赏
  • 举报
回复
可以这么 new
c/c++ 的二维数组就是 数组的数组。 new int[n][n] 等于 typedef int[n] arrayint; new arrayint[n];

但是数组的数组和指针的指针是两个概念,内存布局不一样的
dragonzxh 2007-04-18
  • 打赏
  • 举报
回复
2维数组不能这么new吧。。。。
www_adintr_com 2007-04-18
  • 打赏
  • 举报
回复
函数参数改为 void MatrixChain(int *p,int n,int (*m)[n],int (*s)[n])
thinkinnight 2007-04-18
  • 打赏
  • 举报
回复
回去试试
zasdfaaa 2007-04-18
  • 打赏
  • 举报
回复
to freshui(五月的风)
感谢,我收了。
www_adintr_com 2007-04-18
  • 打赏
  • 举报
回复
#include <iostream>
#include <stdlib.h>

using namespace std;

void MatrixChain(int *p,int n,int **m,int **s)
{
for(int i = 1;i<=n;i++) m[i][i] = 0;
for(int r = 2;r<=n;r++)
for(int i=0;i<=n-r+1;i++){
int j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1] * p[i] * p[j];
s[i][j]=i;
for(int k=i+1;k<j;k++){
int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(t<m[i][j]){
m[i][j]=t;
s[i][j]=k;}
}
}
}

void Traceback(int i,int j,int **s)
{
if(i==j) return;
Traceback(i,s[i][j],s);
Traceback(s[i][j]+1,j,s);
cout<<"Multiply A"<<i<<","<<s[i][j];
cout<<"and A"<<(s[i][j]+1)<<","<<j<<endl;
}


int main(int argc, char *argv[])
{
int n;
cout<<"请输入数组个数:";
cin>> n;
int *r=new int [n];
int *c=new int [n];
for(int i=0;i<n;i++)
{
cout<<"请输入第"<<(i+1)<<"个矩阵的行数:"<<endl
<<"请输入第"<<(i+1)<<"个矩阵的列数:"<<endl;
cin>>r[i]>>c[i];
}

typedef int* int_ptr;
int **a = new int_ptr[n];
int **b = new int_ptr[n];

for(int i = 0;i < n; ++i)
{
a[i] = new int[n];
b[i] = new int[n];
}

MatrixChain(c,n,a,b);
Traceback(1,n,b) ;
system("PAUSE");
return 0;
}
banzhiyu 2007-04-18
  • 打赏
  • 举报
回复
能针对我这具体的代码给出具体方案吗?
哪里需要改动?
www_adintr_com 2007-04-18
  • 打赏
  • 举报
回复
n 必须是编译期常量
你的 n 是运行期读进来的就不能这样用了,

你可以用一维数组来模拟多维数组或者用循环 new n 次
banzhiyu 2007-04-18
  • 打赏
  • 举报
回复
到底什么地方需要改进呢?
#include <iostream>
#include <stdlib.h>

using namespace std;

void MatrixChain(int *p,int n,int (*m)[n],int (*s)[n])
{
for(int i = 1;i<=n;i++) m[i][i] = 0;
for(int r = 2;r<=n;r++)
for(int i=0;i<=n-r+1;i++){
int j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1] * p[i] * p[j];
s[i][j]=i;
for(int k=i+1;k<j;k++){
int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(t<m[i][j]){
m[i][j]=t;
s[i][j]=k;}
}
}
}

void Traceback(int i,int j,int **s)
{
if(i==j) return;
Traceback(i,s[i][j],s);
Traceback(s[i][j]+1,j,s);
cout<<"Multiply A"<<i<<","<<s[i][j];
cout<<"and A"<<(s[i][j]+1)<<","<<j<<endl;
}


int main(int argc, char *argv[])
{
int n;
cout<<"请输入数组个数:";
cin>> n;
int *r=new int [n];
int *c=new int [n];
for(int i=0;i<n;i++){
cout<<"请输入第"<<(i+1)<<"个矩阵的行数:"<<endl
<<"请输入第"<<(i+1)<<"个矩阵的列数:"<<endl;
cin>>r[i]>>c[i];}
int (*a)[n]=new int [n][n];
int (*b)[n]=new int [n][n];
MatrixChain(c,n,a,b);
Traceback(1,n,b) ;
system("PAUSE");
return 0;
}

大体实现的是矩阵相乘.
banzhiyu 2007-04-18
  • 打赏
  • 举报
回复
TO adlay(www.adintr.com)(无可奈何天):
您说的 void MatrixChain(int *p,int n,int (*m)[n],int (*s)[n])
中的n是不是得赋初值啊,不能是未知大小的吧.
下面我把代码贴出来,您看看吧.

65,213

社区成员

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

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