所以我试图定义一个通用的ADT。 我有一个如下所示的结构:
struct grid_type{
void* table;
int startX, startY, endX, endY, xDim, yDim;
};
正如你所看到的,我有一个空指针,它应该能够存储各种数据类型。
对于这个例子,我试图指向此函数返回的 int** (二维数组):
int** CreateInt(int xDim, int yDim){
int** table = NULL;
int i, j;
table = (int**)malloc(xDim*sizeof(int*));
if (table == NULL){
puts("failed malloc");
exit(1);
}
for (i = 0; i < xDim; i++){
table[i] = (int*)malloc(yDim*sizeof(int));
if (table[i] == NULL){
puts("failed malloc");
exit(1);
}
for (j = 0; j < yDim; j++){
table[i][j] = 1;
}
}
return table;
}
相当基本的功能。 所以我没能做的是稍后从这个数组中读取,似乎无法访问任何数据。 这就是我尝试的方法:
void PrintInt(grid* grid){
int i, j, add = 0;
for (i = 0; i < grid->xDim; i++){
for (j = 0; j < grid->yDim; j++){
add = i*(grid->xDim-1) + j;
printf("%d ", *((int*)grid->table+add)); <--- PROBLEM
}
printf("\n");
}
}
这就是这一切在 main 中发生的方式:
grid1 = CreateGrid((*CreateInt), xDim, yDim, startX, startY, endX, endY);
PrintInt(grid1);
我得到的是 100% 的胡言乱语,有什么想法吗?
最佳答案
void PrintInt(grid* grid){
int i, j;
int **table = grid->table;
for (i = 0; i < grid->xDim; i++){
for (j = 0; j < grid->yDim; j++){
printf("%d ", table[i][j]);
}
printf("\n");
}
}
关于C:从 void* 读取 int**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021406/