指向二维数组元素的指针。我怎样才能将它传递给函数?

时间:2011-10-25 23:34:16

标签: c arrays function pointers multidimensional-array

我创建了二维char数组。大小由用户指定。

N = atoi(argv[1]);
char table[N][N];
// fill it

现在我需要一个函数,它有一个指向这个数组的任何元素的指针。我想使用recurency来遍历这个矩阵(在两个维度中)。是否可以定义这样的功能?我该怎么做?

2 个答案:

答案 0 :(得分:2)

以下函数将您的表作为参数:process_table(table, N, N)

void process_table(char *input_table, unsigned int x_dimension, unsigned int y_dimension)
{
  // do stuff
}

然后,如果你需要迭代矩阵中的值:

void process_table(char *input_table, unsigned int x_dimension, unsigned int y_dimension)
{
  for(int i=0; i<N; i++)
    for(int j=0; j<N; j++)
    {
      // operate on the array element *(input_table + i + y*j)
    }
}

答案 1 :(得分:2)

ObscureRobot的回答是可以的,下面还有另一个解决方案。

使用typedef并让编译器管理数组的偏移量。请参阅下面的代码。

#include <assert.h>

void test(char **table, int y) /* the x dimension is not needed here */
{
    typedef char array_t[y];
    typedef array_t *array_ptr;
    array_t *tmp_array = (array_ptr)table;
    /* and access the table */
    tmp_array[1][2] = 1;
    return;
}

int main()
{
    char table[2][3];
    table[1][2] = 0;
    assert(table[1][2] == 0);
    test((char**)table, 3);
    assert(table[1][2] == 1);
    return 0;
}

已编辑:抱歉,我首先上传的版本不正确,现在已更正。如果您无法编译,请使用当前代码或检查array_t *tmp_array = (*array_ptr)table;第7行中是否有类似的小行星。如果是,请删除后者。

此外,代码在我的笔记本电脑上正常运行,gcc (GCC) 4.6.1 20110819 (prerelease) 包含编译选项gcc a.cgcc a.c -ansi