Help! 数组返回问题

yylccy 2007-12-11 08:52:02
int** Lcs_Length(string X,string Y)
{
int m = X.length();
int n = Y.length();
int b[7][7];
int c[7][7];
for(int i=1;i<m;i++)
c[i][0] = 0;
for(int j=0;j<n;j++)
c[0][j] = 0;
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
if(X[i] == Y[j])
{
c[i][j] = c[i-1][j-1] + 1;
b[i][j] = 1;
}
else
if(c[i-1][j] >= c[i][j-1])
{
c[i][j] = c[i-1][j];
b[i][j] = 2;
}
else
{
c[i][j] = c[i][j-1];
b[i][j] = 3;
}
}
}

return **b;
}
int Print_Lcs(int **b,string X,int i,int j){}
int main()
{
string X = ("xzyzzyx");
string Y = ("zxyyzxz");
int i = X.length();
int j = Y.length();
Print_Lcs( Lcs_Length(X,Y),X,i,j);
return 0;
}
在里面第一个函数Lcs_Length需要返回以个二维数组b给第二个函数Print_Lcs使用。
但是在返回数组得时候出现了问题,说:d:\my documents\visual studio 2005\projects\queue\lcs\lcs\longest_commen_sequence.cpp(40) : error C2440: “return”: 无法从“int”转换为“int **”
从整型转换为指针类型要求 reinterpret_cast、C 样式转换或函数样式转换。
而把b进行强制转换成return (int **)b;程序不报错,但是显示访问发生冲突!这个该怎么办啊..
...全文
84 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryfdizuo 2007-12-11
  • 打赏
  • 举报
回复
就是二维数组里面int p[row][coll]的row,coll啊,
int q[row*coll], int p[row][coll]
int p[i][j], int q[i*coll+j]一样的,
yylccy 2007-12-11
  • 打赏
  • 举报
回复
草:N和M代表得是什么意思?
ryfdizuo 2007-12-11
  • 打赏
  • 举报
回复
仓促了一点,本人习惯了使用二维数组啊,
谢谢指教...^_^^_^
healer_kx 2007-12-11
  • 打赏
  • 举报
回复
还有楼上的, 2维数组不要那样new。。。显然没有经验。。。

int* b = new int[N * M];
enough~

b[x * M + y]就是x行,y列的数据了。。。

ryfdizuo 2007-12-11
  • 打赏
  • 举报
回复
只能够内部定义指针,而后申请空间,将指针所指向的地址传出去
ryfdizuo 2007-12-11
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
using namespace std;


int** Lcs_Length(string X,string Y)
{
int m=X.length();
int n=Y.length();
//int b[7][7];
int** b;
b=new int*[7];
for(int i=0; i<7; i++)
b[i]=new int[7];

int c[7][7];
for(int i=1;i<m;i++)
c[i][0] = 0;
for(int j=0;j<n;j++)
c[0][j]=0;
for(int i=1;i <m;i++)
{
for(int j=1;j <n;j++)
{
if(X[i]==Y[j])
{
c[i][j] = c[i-1][j-1]+1;
b[i][j] = 1;
}
else
if(c[i-1][j] >= c[i][j-1])
{
c[i][j] = c[i-1][j];
b[i][j] = 2;
}
else
{
c[i][j] = c[i][j-1];
b[i][j] = 3;
}
}
}
return b;
}
int Print_Lcs(int **b, string X, int i, int j)
{
return 0;
}

int main()
{
string X("xzyzzyx");
string Y("zxyyzxz");
int i = X.length();
int j = Y.length();
Print_Lcs( Lcs_Length(X,Y),X,i,j);

return 0;
}
yylccy 2007-12-11
  • 打赏
  • 举报
回复
那应该怎么办呢?
healer_kx 2007-12-11
  • 打赏
  • 举报
回复
又不是Java,C语言第一不准返回数组, 第二不可以返回栈上对象的指针或者引用, 栈数组的名字就是数组的首地址。。。 。。。
yylccy 2007-12-11
  • 打赏
  • 举报
回复
return b;的话,就变成返回b[7][7]了,编译器是这样说得:d:\my documents\visual studio 2005\projects\queue\lcs\lcs\longest_commen_sequence.cpp(40) : error C2440: “return”: 无法从“int [7][7]”转换为“int **”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
yylccy 2007-12-11
  • 打赏
  • 举报
回复
int**   Lcs_Length(string   X,string   Y) 
{
int m = X.length();
int n = Y.length();
int b[7][7];
int c[7][7];
for(int i=1;i <m;i++)
c[i][0] = 0;
for(int j=0;j <n;j++)
c[0][j] = 0;
for(int i=1;i <m;i++)
{
for(int j=1;j <n;j++)
{
if(X[i] == Y[j])
{
c[i][j] = c[i-1][j-1] + 1;
b[i][j] = 1;
}
else
if(c[i-1][j] > = c[i][j-1])
{
c[i][j] = c[i-1][j];
b[i][j] = 2;
}
else
{
c[i][j] = c[i][j-1];
b[i][j] = 3;
}
}
}

return **b;
}
int Print_Lcs(int **b,string X,int i,int j){}
int main()
{
string X = ("xzyzzyx");
string Y = ("zxyyzxz");
int i = X.length();
int j = Y.length();
Print_Lcs( Lcs_Length(X,Y),X,i,j);
return 0;
}
ryfdizuo 2007-12-11
  • 打赏
  • 举报
回复
函数返回值不对把
return **b;
return b;就可以了把,

hellox 2007-12-11
  • 打赏
  • 举报
回复
代码格式化一下吧。。。

64,639

社区成员

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

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