偶因为工程需要而编写了类似于
int APIENTRY fooMatrix33(BYTE *buffer,BYTE *Matrixbuffer,int nLen,int nHeight,int nWidth,int aValue)这样的函数,其中*buffer中的数据是一个二维数组的数据。而在这里偶只能得到它的首地址。这样的话计算起来麻烦的要命且容易出错。有没有什么好办法可以把这段数据转换成二维数组阿?或者直接把数组传过来

解决方案 »

  1.   

    int a[3][4]= {..};int * p = (int *)a;
      

  2.   

    int * p = (int *)a;
    没看懂,不好意思
    这个 *p就是偶的那个buffer指针?
    但是还有一个问题就是在数据传递过来前偶不知道这个数组究竟有多大。。VC中能不能动态分配数组阿
      

  3.   

    在函数fooMatrix33里调用一个专门把buffer开头的数据转换为二维数组

    int a[2][2];
    Convert(BYTE *buffer,int a[2][2])
    下面用时就可以直接用数值名a了
      

  4.   

    TO: try876(彼岸) 
    在参数传递过来时,我能够知道这段数据的总长度是多少,但是在程序中怎么定义呢?
    如果只定义int a[2][2]但是传递过来10个数据的话,那么就会越界吧?(感觉像缓冲区溢出攻击。。汗)
      

  5.   

    你总要知道二维数组是几行几列把。然后根据  长度=M*N,然后将一维转换成二维数组。
    传递二为数组因该是:
    fun(int(*p)[N]);
    fun(int a[][N]);
    fun(int a[M][N]);
      

  6.   

    你想问你是不是知道了总长度也就知道了多少行多少列
    如果是,你就不用把它转化为二维数组,
    假设M行,N列,你要访问a[i][j]这个元素,可以用
    int* p= buffer;
    p[N*i+j];//p[N*i+j]就代表a[i][j]
      

  7.   

    const int nRow = 5,nCol = 7;
    int a[nRow][nCol];
    int * p;
    p = new int[nRow*nCol];//nRow,nCol;可以不是常理
    for(int i = 0; i < nRow ; i++)
    for(int j = 0 ; j < nCol ; j++)
             p[i * nCol ] = a[i][j];
        //调用你的函数 delete [] p;
      

  8.   

    技术上可行
    符合你的要求吗?
    如果不明白,你可以
    (1),给我发短消息(请附帖子的地址).
    (2),根据http://www.vcshare.net上的联系方式与我联系,推荐QQ.
    (3),如果问题简单,请在http://www.vcshare.net/bbs上发帖.
        如果问题比较复杂,请把代码压成*.rar当附件发在我的论坛上发帖.
        同时在www.csdn.net上发帖,并给出在我的论坛的链接.
    ---------------
    压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps.
      

  9.   

    TO he_zhidan:你把楼主的意思理解反了,
    楼主是要把一维的转换成二维的,
    你的贴子上都是把二维的转换成一维的
      

  10.   

    void test(char *a)
    {
    char (*p)[8];
    p = (char(*)[8])a; //下面就可以使用二维数组p[][]了
    for(int i=0; i<3; i++)
    {
    for(int j=0; j<8; j++)
    printf("%d,", p[i][j]);
    printf("\n");
    }
    }void main()
    {
    char *a = new char[24];
    for(int i=0; i<24; i++)
    {
    a[i] = i;
    }
    test(a);
    }