C++里面可以这样
void Func(int arr[][]); 
我调用的时候直接不管数组有多大
直接用就可以
a[99][99];
Func(a);
可是我用MFC出现问题
void Func(int arr[33][33]);
比如arr[]; 必须指定长度才能使用.调用的函数声明的时候也必须和传递过来的大小一致才能正常使用,假如声明不带大小就出错.而我实际需要的是不管生成的数组有多大  都能调用Func(a);
请教下这个问题MFC是用什么技术来解决的,或者说来替换C++的用法的
是CArray[][]吗?

解决方案 »

  1.   

    你可以改进你的Func()函数,改为Func(int**,int ,int),参数分别是二维数组首地址指针,行、列的长度。
      

  2.   

    作为二维数组,你可以这样定义:
    void Func(int arr[][33]);
    这样,你可以动态决定数组的大小了
      

  3.   

    我想了几种解决办法
    一个就是zaosui 说的我传递数组有地址 然后 行列长度  然后在由子程序自动组装
    可是我传递的是5个数组。.这就需要大量的参数。.还是有点麻烦
    想找种好点的办法下面两楼说的方法..首先我 行列的长度子程序都不知道
    调用的程序也是别的函数弄出来的数组大小只有在调用的时候才知道的。
    我就想找到一个象C++那样直接写Func(int arr[][])就能解决的问题。.
    可能CArray可以。正在找资料呢
      

  4.   

    可以用CArray,但是效率和开销有问题
    要保证效率,应该使用指针,多维数组,在c里其实还是一维的,是一块连续的缓存区域,用指针操作麻烦一些,但不会有问题
      

  5.   

    void Func(std::vector<std::vector<int> > arr);
      

  6.   

    哎...不用什么Array了。塌实的指针了。.结了..先写着在说了。谢谢大家
      

  7.   

    C++里面可以这样写  固定的大小数组参数就是int arr[33][33];
    接收函数这样 Func(int arr[][])可是MFC这样写就是错误的Func(int arr[][])  必须指定大小.只指定一半的话 不能动态建立必然浪费了很大的空间可以用new来动态解决所传递的参数这样写Func(int *arr,int x,int y)然后直接按照地址接就可以 地址为arr+x*y-1
    ==============================================
    写完了程序才发现。.干脆我也不设置传递参数了,直接设置public 两个类互相调用
    下就成了不过MFC的数组类CArray用做二维数组 比较省空间. 能定义每一行的大小.
    比如这样的  
    1 2 3 4 5 6
    1 2 3
    1 2 3 4 5 6 7
    省了空间 不过浪费了操作时间..不过CArray来做二维 是够麻烦的。还不如用指针方便
    =============================================