求教高手 如何在vc在传递二维数组
该二维数组的两维都不固定 因为调用后要用于多次运算void abc()//参数又怎么写? 问题都问错了,呵呵。
VC是工具,不是语言。C++才是语言。所以不存在你说的怎样在VC中传递二维数组。
void abc();参数怎么写????这个要看具体应用。
在C++中,传递二维数组:
这个用模板或者VECTOR可以做到吧。本人太菜,举不出例子来,帮顶一下吧,让高手帮你。 我也很菜。
1.关于 2D 数组
你可以尝试直接传递并同时给出秩,然后在函数里对其进行处理。
比如有个 2D 数组 [font=Courier New]BYTE a[][][/font]
而且你是这样生成 a 的:
[code]BYTE * a[][] = new BYTE[column][row];[/code]
那么你就这么传递参数:
[code]void func(BYTE * array, int column, int row);[/code]
2.一般函数是这么声明的:
[code]返回值 函数名([类型 参数1, ..., 类型 参数n]){
[语句;]
}[/code]
比如:
[code]int GetNumber();
String GetName(int ID);
double Calculate(double operandA, float operandB, BOOL flag){
return operandA + operandB;
}[/code]
[color=Red]如果我有 syntax error 请无视。[/color]
[[it] 本帖最后由 野比 于 2008-5-7 14:03 编辑 [/it]] 传递二维数组,仿野比兄方法写的代码,有错误,可能我水平太菜。代码有不妥处,请指出,谢谢!!!
[quote][font=新宋体][size=2][color=008000]/********************************************************
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
[/color][color=FF0000]#include[/color]<[color=FF0000]iostream[/color]>
[color=0000FF]using namespace [/color][color=FF0000]std[/color];
[color=0000FF]int [/color][color=FF0000]main[/color]()
{
[color=0000FF]int [/color]row=[color=800080]5[/color],column=[color=800080]5[/color];
[color=0000FF]int [/color][color=008080]func[/color]([color=0000FF]int [/color]* a, [color=0000FF]int [/color]row, [color=0000FF]int [/color]column);
[color=0000FF]int [/color]a[][]=[color=0000FF]new int[/color][column][row];
[color=0000FF]for[/color]([color=0000FF]int [/color]i=[color=800080]0[/color];i<row;i++)
[color=0000FF]for[/color]([color=0000FF]int [/color]j=[color=800080]0[/color];j<column;j++)
a[i][j]=i+j;
[color=008080]func[/color](*a,row,column);
[color=008080]system[/color]([color=FF00FF]"pause"[/color]);
[color=0000FF]return [/color][color=800080]0[/color];
}
[color=0000FF]int [/color][color=008080]fun[/color]([color=0000FF]int [/color]*a,[color=0000FF]int [/color]row,[color=0000FF]int [/color]column)
{
[color=0000FF]for[/color]([color=0000FF]int [/color]i=[color=800080]0[/color]; i<=row;i++)
[color=0000FF]for[/color]([color=0000FF]int [/color]j=[color=800080]0[/color];j<=column;j++)
[color=FF0000]cout[/color]<<a[row][column]<<[color=FF00FF]" "[/color];
}
[/size][/font][/quote]
其中int a[][]=new int[column][row]这一句提示:
cannot convert from 'int (*)[1]' to 'int [][1]', #include<iostream>
using namespace std;
int func(int *a[],int row,int column)
{
for(int i=0; i<row;i++)
for(int j=0;j<column;j++)
cout<<a[i][j]<<" ";
return 0;
}
int main()
{
int row=5,column=5;
int **a;
a=new int *[row];
for(int i=0;i<row;i++)
{
a[i]=new int[column];
for(int j=0;j<column;j++)
a[i][j]=i+j;
}
func(a,row,column);
system("pause");
return 0;
} 我也出现这个问题,但是怎么定义随机N维数组可以定义
但是在从文本文档中读取数据的时候出错,估计是内存问题
随机数组定义如下:
int row,colum;//行列数
double **atob_bl=new double*[];
for(int r=0;r<row;r++)
{
atob_bl[r]=new double[colum];
}
传递的时候定义一个指针:
double **atob_bl_p;
//指针指向数组
atob_bl_p=atob_bl;
然后传递的时候直接传递后面定义的指针
这样都可以传递,但是我的问题就是读取数据的时候读不出来
行列数小还可以,行数大于5的时候就出错了
正郁闷这个问题呢!所以准备该换vector了
如果有哪位高手可以提供不用指针定义随机n维数组的话,不胜感激 还是sun兄强。代码我搬走了哈。
这里:int **a;
a=new int *[row];
for(int i=0;i<row;i++)
{
a[i]=new int[column];
用两句话来分配内存,我不是很理解。呵呵,我看的书还太少了,麻烦sun兄解释一下了。 由于是两维的所以要分开;
编译器不认识int a[][]=new int[column][row];
第一次是给让a指向一个连续空间,而且要说明这段空间是用来放地址的
a=new int *[row];
第二次再让a[i]指向一段连续空间,这段空间是放int的
a[i]=new int[column];
用完后要释放..要不内存泄露的
最后可以用a[i][j]来遍历数组了....
动态数组在内存上并不连续...*(*a+row*i+j)这个是不能用的..
[[it] 本帖最后由 sunkaidong 于 2008-5-7 16:07 编辑 [/it]] #include<iostream>
using namespace std;
int func(int a[][5],int row,int column)
{
for(int i=0; i<row;i++)
for(int j=0;j<column;j++)
cout<<a[i][j]<<*(*a+row*i+j)<<endl;
return 0;
}
int main()
{
int row=5,column=5;
int a[5][5];
//a=new int *[row];
for(int i=0;i<row;i++)
{
// a[i]=new int[column];
for(int j=0;j<column;j++)
a[i][j]=i+j;
}
func(a,row,column);
system("pause");
return 0;
}
如果是静态就可以用...而且参数传递也有区别 谢谢sun兄了。 回头来看我真想删掉我的回帖...完全忘了 C++ 的语法了...
sun 说的对,new 只支持 1D-Array,所以要用循环分配内存,我写的那个是在 C# 里的用法。
还有形参需不需要 & 呢?完全忘了
- -! 好汗啊..
总之,对于数组,牢记它的指针形式就很容易决定出操作方式。(下面的图是我手画的,将就看看)
1. 1 维数组:a[]
[attach]34514[/attach]
2. 2 维数组:b[][]
[attach]34515[/attach]
3. 3 维数组:c[][][]
想象一个魔方,其他和二维一样
4. 多维(3 维以上)数组:
想象魔方每个小方块里面放了 1、2、3... 维数组
页:
[1]
