| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4652 人关注过本帖
标题:求教高手 如何在vc在传递二维数组
只看楼主 加入收藏
Johnwell
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-5-4
收藏
 问题点数:0 回复次数:10 
求教高手 如何在vc在传递二维数组
该二维数组的两维都不固定 因为调用后要用于多次运算
void abc()//参数又怎么写?
搜索更多相关主题的帖子: void abc 参数 
2008-05-06 09:36
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
问题都问错了,呵呵。
VC是工具,不是语言。C++才是语言。所以不存在你说的怎样在VC中传递二维数组。
void abc();参数怎么写????这个要看具体应用。
在C++中,传递二维数组:
这个用模板或者VECTOR可以做到吧。本人太菜,举不出例子来,帮顶一下吧,让高手帮你。

i like linux...
2008-05-06 19:36
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 
我也很菜。
1.关于 2D 数组
你可以尝试直接传递并同时给出秩,然后在函数里对其进行处理。
比如有个 2D 数组 BYTE a[][]
而且你是这样生成 a 的:
BYTE * a[][] = new BYTE[column][row];

那么你就这么传递参数:
void func(BYTE * array, int column, int row);

2.一般函数是这么声明的:
返回值 函数名([类型 参数1, ..., 类型 参数n]){
    [语句;]
}

比如:
程序代码:
int GetNumber();
String GetName(int ID);
double Calculate(double operandA, float operandB, BOOL flag){
    return operandA + operandB;
}



如果我有 syntax error 请无视。

[[it] 本帖最后由 野比 于 2008-5-7 14:03 编辑 [/it]]

女侠,约吗?
2008-05-07 14:01
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
传递二维数组,仿野比兄方法写的代码,有错误,可能我水平太菜。代码有不妥处,请指出,谢谢!!!
/********************************************************
** Highlight software by yzfy(雨中飞燕) http:// *
*********************************************************/
#include<iostream>
using namespace std;
int main()
{
   
    int row=5,column=5;
    int func(int * a, int row, int column);
    int a[][]=new int[column][row];
    for(int i=0;i<row;i++)
        for(int j=0;j<column;j++)
            a[i][j]=i+j;
    func(*a,row,column);
    system("pause");
    return 0;
}
int fun(int *a,int row,int column)
{
    for(int i=0; i<=row;i++)
        for(int j=0;j<=column;j++)
            cout<<a[row][column]<<"   ";
}

其中int a[][]=new int[column][row]这一句提示:
cannot convert from 'int (*)[1]' to 'int [][1]',

i like linux...
2008-05-07 14:37
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#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;
}

学习需要安静。。海盗要重新来过。。
2008-05-07 15:36
mxzcmxzc
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-4-30
收藏
得分: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维数组的话,不胜感激
2008-05-07 15:42
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
还是sun兄强。代码我搬走了哈。
这里:int **a;
        a=new int *[row];
    for(int i=0;i<row;i++)
    {
        a[i]=new int[column];   
用两句话来分配内存,我不是很理解。呵呵,我看的书还太少了,麻烦sun兄解释一下了。

i like linux...
2008-05-07 15:48
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
由于是两维的所以要分开;
编译器不认识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]]

学习需要安静。。海盗要重新来过。。
2008-05-07 16:02
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#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;
}
如果是静态就可以用...而且参数传递也有区别

学习需要安静。。海盗要重新来过。。
2008-05-07 16:14
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
谢谢sun兄了。

i like linux...
2008-05-07 18:14
快速回复:求教高手 如何在vc在传递二维数组
数据加载中...
 
   



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

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