QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 836|回复: 5

如何传递2维数组参数

[复制链接]
发表于 2003-4-21 09:42:13 | 显示全部楼层 |阅读模式
问个笨笨的问题,C语言中如何传递2维数组参数

直接传递数组名作为指针参数会报错。。。
发表于 2003-4-21 10:42:32 | 显示全部楼层
char x[2][3];

fun1( char ** x)
{..
}

main()
{
fun1(x);
}
回复

使用道具 举报

发表于 2003-4-21 10:51:02 | 显示全部楼层
In C++, two-dimensional array (actually any array is passed by reference). Maybe you can post your code so others could look at it.
回复

使用道具 举报

 楼主| 发表于 2003-4-22 08:47:53 | 显示全部楼层
如果把数组定义为全局的话就没所谓参数传递啦
我希望用C来编程,所以不想用引用

其实后来想了想,觉得我的想法是没可能实现的,
我最初想要做到的效果是:

[code:1]
void foo(int **a,int n)
{
     if(n > 2)
             a[2][2]=1;
    .....
}

...
void fun1()
{
    int x[6][6];
   ...
    foo(x, 6);
    ...
}

void fun2()
{
   int y[4][4];
   ...
   foo(y,4);
}
[/code:1]

后来想了想觉得其实是没法实现这样的
因为C里面的多维数组也是线性存贮的
象a[x][y] 事实上是引用
a的基地址  +  (x * a 行向量的元素个数 + y) * size of a's base element
那个地址的数

所以在foo 中
   a[2][2]
中的语义就不清晰了,因为foo不知道a的的列数,所以根本不能正确访问到元素
我用gcc编译时会出现warning,不会error....
但一运行就会segment fault 了  

呵呵,不知道我的想法有没有问题
或者各位有没有好的idea可以解决
回复

使用道具 举报

发表于 2003-4-22 10:46:05 | 显示全部楼层
struct xxx{
  void **;
  int Dimem1;
  int Dimen2;
  int capacity;
}
回复

使用道具 举报

发表于 2003-4-22 10:51:03 | 显示全部楼层
[code:1]
#include <stdio.h>
#include <stdlib.h>

void foo(int a[2][3])
{
        int i, j;

        for (i = 0; i < 2; i++)
                for (j = 0; j < 3; j++)
                        printf("%d\n", a[i][j]);
        return;
}
int main()
{
        int m[6];
        int i;
        for (i = 0; i < 6; i++)
                m[i] = i;
        foo((int **m);
}
[/code:1]
is a possible one.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 02:38 , Processed in 0.081792 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表