我创建了二维的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.c
或gcc a.c -ansi