| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 17705 人关注过本帖
标题:C++中函数怎么返回一个二维数组。指针怎么指向二维数组?
取消只看楼主 加入收藏
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
 问题点数:0 回复次数:15 
C++中函数怎么返回一个二维数组。指针怎么指向二维数组?
在C++中,如果我的函数想返回一张表,这张表是二维的。应该怎么返回。如果我想用一个指针指向一个二维数组,这个指针应该怎么定义。
例如
int functionA();//我想使这个函数返回一个二维数组,函数这么申明行么?
void main()
{
int a[10][10]={0},*p,b[10][10];
  p=a;//这样申明在visual c++6的编译器中是无法通过的。
       //如果我想用一个指针指向这个数组,并操作他,应该怎么办?
   b=functionA();//使得A返回一个二维数组,这样做也是在visual c++6的编译器中是无法通过的。正确做法因该是怎样的?
}
int functionA()
{int temp[10][10]={0};
   return temp;
}

[[italic] 本帖最后由 VanHorn 于 2008-1-9 11:17 编辑 [/italic]]
搜索更多相关主题的帖子: 指针 函数 
2008-01-08 10:55
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
版主,那正确的做法应该是怎样的啊?
2008-01-08 11:07
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
我写一个一维的也不对啊。我就不懂怎么返回一个数组。请版主不吝赐教。
以前的函数都使用的是void 型返回的。没在意这个问题。
2008-01-08 11:14
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
反正我返回数组就是错的,如果说要返回一个一维数组的话,直接返回一维数组也是错的,除非返回一个指针,例如
int *functionA();
void main()
{
int a[10]={0},*p1;
 
      
   p1=functionA();
   a=p1;//如果没有这行,编译是正确的。有了这行,编译就是错的,但是没有这行,我还是没法返回一个数组。

}
int *functionA()
{int temp[10]={0},*p2;
   p2=temp;
   return p2;
}



对于上面的错误,我只能这么修改:



int *functionA();
void main()
{
int a[10]={0},*p1,i;
 
      
   p1=functionA();
   for(i=0;i<10;i++)//好麻烦啊。
   {a[i]=*(p1+i);}


}
int *functionA()
{int temp[10]={0},*p2;
   p2=temp;
   return p2;
}

这样编译是正确的,那么在C++中就没有返回数组的说法吗?如果没有,我要使用一个二维数组,指针应该怎么指?

[[italic] 本帖最后由 VanHorn 于 2008-1-9 11:17 编辑 [/italic]]
2008-01-08 11:27
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
通过楼上各位高手的讲解,兄弟虽然没有全听明白,但是通过版主,14楼,15楼等的讲解,函数返回数组一说是被否定了。那么我想返回的就只能是指针了,那么通过指针给数组赋值就只能通过for语句之类的循环了吧。就类似我在7楼的做法。
    如果一个指针指的是一个二维数组,这个指针应该怎么指呢?就如同我在1楼发的问题。我试过很多中做法,但编译器都是无法通过的。
例如:
int a[20][20],*p1,**p2;
p1=a;//用二维数组的地址传递给一维指针,这个用法显然是不对的,编译器无法通过,
p2=a;//编译器同样没法通过。这里,我就想问问懂的高手,怎样用一颗指针指向二维数组。

[[italic] 本帖最后由 VanHorn 于 2008-1-9 11:28 编辑 [/italic]]
2008-01-09 11:10
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
难道C++中也没有指针指向二维数组的说法吗?兄弟我在线等答案啊。
2008-01-09 19:36
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
关于指针是怎么指二维数组是搞清楚了。应该这样。
void main()
{
int a[10][10]={0},(*p)[10];
p=a;
}
这样就是申明一个二维指针,指向二维数组。
那么新的问题产生了,一个自定义的函数怎么返回一个二维指针,也就是一个自定义函数要返回形如(*p)[n]的指针,应该要怎么申明?楼上的各位高手都说了,函数只能返回指针,但是当我试图返回一个二维指针时。编译器照样报错!
int *a();
void main()
{
    int b[10][10]={10},(*p1)[10];
 
      
  p1=b;//可以指向
  p1=a();//这一行是错的
   


}
int *a()
{   
    int (*p)[10],b[10][10]={2};
    p=b;
    return p;
}
到底应该怎么做才能返回一个二维数组啊????!!!

[[italic] 本帖最后由 VanHorn 于 2008-1-9 20:59 编辑 [/italic]]
2008-01-09 20:52
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
怎么返回。请楼上的说具体一点?
2008-01-09 21:09
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
如果是这样的话,f只返回了二维数组的第一行的地址。要在主函数中对数组进行第二行的元素进行操作是不行的。我能做的只是操作第一行的元素罢了,例如:
#include <iostream>
using namespace std;
int* f()
{
        int arr[2][3] = {{1,2,3}, {7,8,9}};
        return arr[0];
}

int main()
{
    int *p;
    p=f();

    cout << *p << endl;//这里怎么操作指针p都只是对二维数组的第一行进行操作。
        system("pause");
        return 0;
}
而无法对第二行的元素进行操作。

[[italic] 本帖最后由 VanHorn 于 2008-1-9 22:20 编辑 [/italic]]
2008-01-09 21:45
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
好的,问题解决了。楼上的两位对于这个问题的解决一针见血。非常感谢。
    我最想要的结果是  27楼yeshirow的解决方式。返回一个“指向二维数组的指针”,这个结果比较直接。
    28楼随心的解决方式有个运算:“(f()+1)”,不是兄弟我不动脑筋,我之前确实没有见过这种运算。我一直认为f()返回的是一个地址,因此对一个地址加减,之后一定是要取值的,因此我在编译器里试的代码是:“*(f()+1)[2]”,结果当然没通过,所以我错误的认为操作第二行的元素是不可能的。还请随心耐心给讲解一下这个运算的意义?
    我觉得这个问题还是可以深入探讨一下的。既然f()返回的是一个指针(这时候可以认为它返回的是一个一维指针数组),那么给f()进行取地址的操作之后,f()就可以指向二维指针了。
例如:
#include <iostream>
using namespace std;
int* f()
{
        int arr[2][3] = {{1,2,3}, {7,8,9}};
        return arr[0];
}

int main()
{
        int **p;
        p=&(f());//取f的返回值地址,这是不可以的。编译器报错。
        cout << **p<< endl;
        system("pause");
        return 0;
}
现在再对二维指针进行操作,就类似于达到了函数返回二维指针的效果了。上述代码是不可以通过编译的。
    但是如果这样:
#include <iostream>
using namespace std;
int* f()
{
        int arr[2][3] = {{1,2,3}, {7,8,9}},**p;
        p=&(arr[0]);//编译器报错,同样是指向二维指针啊。
        return arr[0];
}

int main()
{
        int **p;
        p=&(f());//这里是有错的。
        cout << **p<< endl;
        system("pause");
        return 0;
}
编译是无法通过的,这是为什么呢?

[[italic] 本帖最后由 VanHorn 于 2008-1-10 17:12 编辑 [/italic]]
2008-01-10 09:37
快速回复:C++中函数怎么返回一个二维数组。指针怎么指向二维数组?
数据加载中...
 
   



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

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