| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6143 人关注过本帖
标题:函数想返回一个二维数组怎么做
只看楼主 加入收藏
y605302737
Rank: 1
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-2-2
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:10 
函数想返回一个二维数组怎么做
大家好,请问下我想将一个二维数组作为函数的返回要怎么做?另外把二维数组作为函数参数有没有不给第二个长度,即Bin值的办法,因为函数Convolution中我想给arr的值和Bin一样,这样函数的参数要怎么写更好一些,我是新手,请大家指点下,谢谢!
程序代码:
#include <iostream>
#include <fstream>
using namespace std;

const int Run = 2;
const int Bin = 2;

int** Convolution(int arr,const int h[],int g[][Bin]);

int main()
{
    ifstream inFile;
    inFile.open("time.txt");
    if(!inFile)
    {
        cerr<<"read time.txt fail"<<endl;
        return 1;
    }
    int Pulse[Run][Bin];
    int value;
    inFile>>value;
    for(int i=0;i!=Run;i++)
    {
        for(int j=0;j!=Bin && inFile.good() ;j++)
        {
                Pulse[i][j]=value;
                inFile>>value;
        }
    }

    if(inFile.eof())
        cout<<"End of the file"<<endl;
   
    inFile.close();

    //convolution
    const int signal[Bin]={2,3};

    int** conv=Convolution(Bin,signal,Pulse);

    cout<<*(*(conv+1)+1)<<endl;

    return 0;   
}


int** Convolution(int arr,const int h[],int g[][Bin])
{
    int s[Run][2*Bin];     //这里我想定义一个二维数组,长度都是已知的,这样写可以吗
    for(int i=0;i!=Run;i++)
    {
        for(int t=0;t!=2*arr;t++)
        {
            for(int n=0;n<=t;n++)
                s[i][t]+=g[i][n]*h[t-n];
        }
    }
    return s;  //请问下这个地方应该怎么写才能返回上面的二维数组

}

 
搜索更多相关主题的帖子: 办法 
2013-03-01 21:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
完全看不懂你的Convolution想干什么,又是不赋初值就使用,又是数组越界的,所以我把Convolution留白,你自己想好了再添加,添加到 Convolution 函数中去
程序代码:
void Convolution_( size_t row, size_t col, const int* h, const int* g, int* s );

template<size_t ROW, size_t COL>
static inline void Convolution( const int (&h)[COL], const int (&g)[ROW][COL], int (&s)[ROW][2*COL] )
{
    Convolution_( ROW, COL, h, &g[0][0], &s[0][0] );
}

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

int main()
{
    ifstream inFile( "time.txt" );
    if( !inFile )
    {
        cerr << "read time.txt fail\n";
        return 1;
    }

    const size_t Run = 2;
    const size_t Bin = 2;
    int Pulse[Run][Bin];
    for( size_t i=0; i!=Run*Bin; ++i )
    {
        inFile >> Pulse[i/Bin][i%Bin];
        if( !inFile )
            break;
    }
    if( inFile.eof() )
        cout<<"End of the file"<<endl;
    inFile.close();

    //convolution
    const int signal[Bin]={2,3};
    int conv[Run][2*Bin];
    Convolution( signal, Pulse, conv );

    cout<< conv[1][1] <<endl;

    return 0;  

}


void Convolution_( size_t row, size_t col, const int* h, const int* g, int* s )
{
    // g[r][c] 写成 g[r*col+c]
    // s[r][c] 写成 s[r*col*2+c]
    // 其它就没什么了
}

2013-03-02 09:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
添加到 Convolution_ 函数中去
2013-03-02 09:26
y605302737
Rank: 1
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-2-2
收藏
得分:0 
回复 2楼 rjsp
你好,我的Convolution函数想做一个离散信号的卷积,从time.txt读取一个二维数组,即多组离散信号pulse,与signal信号作卷积,不知道这样写对吧,哪位高手知道的也可以给指点下,谢谢!

[ 本帖最后由 y605302737 于 2013-3-2 09:44 编辑 ]
2013-03-02 09:28
zjl12006
Rank: 2
等 级:论坛游民
帖 子:6
专家分:26
注 册:2011-3-7
收藏
得分:5 
弱弱的说一句,你在你的Convolution函数中,在堆中开辟一块内存空间,让后,让你的Convolution函数返回一个引用,是否可行?

本人也是菜鸟,只是觉得这样可行。。。不行的话,勿怪啊。。。
2013-03-02 21:08
y605302737
Rank: 1
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-2-2
收藏
得分:0 
回复 5楼 zjl12006
谢谢你的问答,你的意思是用new来建一个动态的二维数组,然后返回这个动态二维数组的指针??
2013-03-03 08:57
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
什么几维数组也好  其数据都是内存中的一片数据  所以你只要返回该片数据的首地址即可

DO IT YOURSELF !
2013-03-03 09:13
y605302737
Rank: 1
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-2-2
收藏
得分:0 
谢谢大家的回答,那有没有谁有做一维卷积的c++程序,可以可以告诉我,

[ 本帖最后由 y605302737 于 2013-3-3 16:25 编辑 ]
2013-03-03 16:23
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:0 
7楼跟我想的一样,简单
2013-03-03 19:56
额外覆盖
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:城市猎人
威 望:6
帖 子:1726
专家分:5757
注 册:2012-9-22
收藏
得分:0 
利用指针函数,返回地址就行了

我现在所学的一切都是为了游戏!!!为了游戏,加油!加油!努力!
2013-03-03 23:08
快速回复:函数想返回一个二维数组怎么做
数据加载中...
 
   



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

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