荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: huhaiming (一生只爱她), 信区: Program
标  题: [合集]请问怎样在自定义的函数中返回数组?
发信站: 荔园晨风BBS站 (Fri May  2 09:53:18 2003), 站内信件

occsor (虚套) 于Thu May  1 09:47:05 2003提到:

我想使函数返回一个数组,怎样才行?
用C

Kenniel (身体快点健康回来) 于Thu May  1 10:20:00 2003提到:

你是这个意思吗?
#include <iostream.h>
#define max 10
int *back( int a[max] )
{
        return a;
}

void main()
{
        int a[max];
        for( int i=0;i<max;i++ )
                a[i]=i;
        for( i=0;i<max;i++ )
                cout<<back( a )[i]<<endl;
}



occsor (虚套) 于Thu May  1 10:35:54 2003提到:

如果a[2][2]={0,0,1,-1},要算a的i次方,
用递归,怎么写?



Kenniel (身体快点健康回来) 于Thu May  1 11:05:35 2003提到:

a的i次方?是a里面的每个数都i次方吗?
把原题贴出来好不!我理解不了呵呵!



occsor (虚套) 于Thu May  1 11:52:17 2003提到:

矩阵a={  0     0
          1    -1 }
存放在二维数组a[2][2]里,
现在要计算矩阵a的i次方,
要用递归方法。



Kenniel (身体快点健康回来) 于Thu May  1 15:02:49 2003提到:

哦!这个比较简单!
将a数组平方后存入b数组,以此类推
最后结果存入b数组,输出b数组 就OK拉^_^!
#include <stdio.h>
int count=0;
void matrix( int a[2][2],int b[2][2],int *n )
{
        int i,j=0,k,p=1;
        if( *n==1 )
                return;
        if( count!=*n-1 )
        {
                for( i=0;i<2;i++ )
                        for( k=0;k<2;k++ )
                                b[i][k]=a[i][j]*b[j][k]+a[i][p]*b[p][k];
                count++;
                matrix( a,b,n );
        }
        return;
}

void main()
{
        int n,i,j;
        int a[2][2]={0,0,1,-1},b[2][2]={0,0,1,-1};
        printf("Input n:");
        scanf("%d",&n);
        matrix( a,b,&n );
        for( i=0;i<2;i++ )
                for( j=0;j<2;j++ )
                        printf("b[%d][%d]=%d\n",i,j,b[i][j]);
}





occsor (虚套) 于Thu May  1 15:40:56 2003提到:

yes,thank.
但如果我现在定义一函数:
double *xxx( int a[2][2])
{
     我在函数里定义一临时的数组b[2][2],
        假设经过运算后,结果在b[2][2]里,
        请问怎么返回2维数组呢?
}



Kenniel (身体快点健康回来) 于Thu May  1 15:54:31 2003提到:

你的意思是不是想在matrix函数里面参数只有a和n阿?
既:matrix( int a[2][2],int *n )

{
        int b[2][2];
} b就在里面定义是不是?
如果你要返回的就再用b存进a,把a带出来咯!
二维的返回我想不到呵呵!sorry



occsor (虚套) 于Thu May  1 17:14:21 2003提到:

我刚才就在试2维的返回,结果总有error



littlebao (爱拼才会赢) 于Thu May  1 18:02:24 2003提到:

#include <iostream.h>

int **return_pointer(void)
{
        int **p ;
    int i , j ;

        p = new int*[3] ;
    for(i = 0 ; i < 3 ; ++i)
        {
                p[i] = new int[3] ;
        }
        for(i = 0 ; i < 3 ; ++i)
                for(j = 0 ; j < 3 ; ++j)
                        p[i][j] = 1 ;

        return p ;
}

main(){
        int **p ;
        int i , j ;

    p = return_pointer() ;

        for(i = 0 ; i < 3 ; ++i)
                for(j = 0 ; j < 3 ; ++j)
                        cout<<p[i][j]<<endl ;
         return 1 ;
}



huhaiming (一生只爱她) 于Thu May  1 18:03:25 2003提到:

我觉得解决方法有二:
1,定义为全局变量,直接在函数里面做你想做的事情
函数用void 声明即可
2,返回形式为:

int *xxx(int a[][])
{
a[2][2]=0;
return &a[2][2];
}
返回的应该就是a[2][2]的地址
如果要返回二维数组的首地址,直接return a;



littlebao (爱拼才会赢) 于Thu May  1 18:19:39 2003提到:

                                 直接返回不行吧?


huhaiming (一生只爱她) 于Thu May  1 18:22:39 2003提到:

直接返回的就是a数组所在的首地址
a和&a[0][0]的地址是一样的

所以,假如你要返回a[i][0]所在的地址,
除了可以写成return &a[i][0];
也可以写成return a[i];
//i是有实际值的^_^

至于函数参数声明里面的int a[][],在C++里面是可以的



littlebao (爱拼才会赢) 于Thu May  1 18:25:32 2003提到:

你编译一下,同不过



huhaiming (一生只爱她) 于Thu May  1 18:29:32 2003提到:

贴出你测试的程序给我,
懒得写了,让我copy直接调吧^_^


littlebao (爱拼才会赢) 于Thu May  1 18:31:46 2003提到:

#include <iostream.h>

int *xxx(int a[][])
{
        a[2][2]=0;
        return  a ;
}

main(){


         return 1 ;
}



huhaiming (一生只爱她) 于Thu May  1 18:50:27 2003提到:

测试之后得出一些新的想法,之前我说的有些是错的,对不起大家了
1,返回的时候可以用a[i],等价于返回&a[i][0]
2, 返回二维数组的时候不能用a,要用a[0]
3,函数声明的时候对于二维数组以上的参数(含二维)要给出具体的大小
想想就知道了,没大小的话,是分配不了内存的,但是,
定义一维的时候可以直接写int a[],这是绝对没有问题的
而我想当然地以为一维可以,那么二维应该也可以,这是错误的
4,返回的时候可以具体到a[i][j],
除了可以用return &a[i][j];
也可以用 return a[i]+j;
但是本人还是建议用return &a[i][j];
可读性比较好一点,也容易查错
#include <iostream.h>
#include <string.h>

int s[5][5];

int *xxx(int a[5][5])
{
        a[1][1]=2;
        return  a[1]+1;
}

int main()
{
        int *p;
        memset(s,0xff,sizeof(s));  //s[i][j]=-1
        p=xxx(s);
        cout<<*p<<endl;
        return 0 ;
}



littlebao (爱拼才会赢) 于Thu May  1 19:12:39 2003提到:

编程谁都不敢说绝对没错,关键是怎么对待错误,难得huhaiming为我们总结了这么多



Kenniel (身体快点健康回来) 于Thu May  1 19:18:10 2003提到:

huhaiming我最欣赏的就是他这点哈哈!编程他教了我
不少哈哈!



huhaiming (一生只爱她) 于Thu May  1 21:01:57 2003提到:

faint!!!!!!!


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店