c-指向二维数组元素的指针.如何将其传递给函数



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

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

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

以下函数将您的表作为参数: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)
    }
}

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

相关内容

  • 没有找到相关文章

最新更新