我创建了二维char数组。大小由用户指定。
N = atoi(argv[1]);
char table[N][N];
// fill it
现在我需要一个函数,它有一个指向这个数组的任何元素的指针。我想使用recurency来遍历这个矩阵(在两个维度中)。是否可以定义这样的功能?我该怎么做?
答案 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.c
或gcc a.c -ansi