将指针传递给两个有限数组作为参数

时间:2015-10-23 20:39:19

标签: c arrays pointers prototype

我需要将一个指向二维数组的指针传递给一个函数但是不能让它工作,我已经尝试过了:
数组定义:

#define BFD_T_CNT           4096
static UINT32 lan_port_bitfield_by_bfd[2][BFD_T_CNT] = {0};

功能原型

int MyFunc(int ncols, int BfdSessionId, UINT32 *puser_ports, 
           UINT32 *ptdm_ports, UINT32 pPortBitmap[][ncols])

呼叫:

MyFunc(BFD_T_CNT, BfdSessionId, &Cacheuser_ports[BfdSessionId-1], 
       &Cachetdm_ports[BfdSessionId-1], lan_port_bitfield_by_bfd);

但我不断收到错误消息: 参数类型与原型不匹配

为什么这样,以及我怎么做呢?

编辑1

我按照dbush的建议尝试了它,原型如下: int MyFunc(int ncols, int BfdSessionId, BITFIELD *puser_ports, BITFIELD *ptdm_ports, UINT32 **pPortBitmap)并在调用函数时将lan_port_bitfield_by_bfd转换为(UINT32)**,但是我无法成功访问函数中的数据,我的访问权限看起来像if (pPortBitmap[0][BfdSessionId] & (0x01<<port))而我在那里遇到异常错误。我已经尝试过 mch 在评论中建议提供ncols&amp; nrows函数但它不会编译,但给我**参数类型不再匹配原型**错误...

1 个答案:

答案 0 :(得分:-1)

这是一对如何在不知道编译时的维度的情况下使用二维数组的示例。第一个使用普通int *并手动计算行/列偏移量,而另一个使用可变长度数组参数。

#include <stdio.h>
#include <stdlib.h>

void f1(int *matrix, int row, int col)
{
    int i,j;
    int *p;
    for(i=0;i<row;i++) {
        // each row is "col" ints long
        p = matrix + (i*col);
        for(j=0;j<col;j++) {
            printf("matrix[%d,%d]=%d\n",i,j,p[j]);
        }
    }
}

void f2(int row, int col, int matrix[row][col])
{
    int i,j;
    for(i=0;i<row;i++) {
        for(j=0;j<col;j++) {
            printf("matrix[%d,%d]=%d\n",i,j,matrix[i][j]);
        }
    }
}

int main()
{
    int matrix[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
    f1(&matrix[0][0],3,5);
    f2(3,5,matrix);
}