荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店