C:从 void* 读取 int**

标签 c pointers void void-pointers

所以我试图定义一个通用的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/

相关文章:

c++ - 在不手动创建线程的情况下定期调用 C 函数

objective-c - 我可以有一个弱静态指针吗?

c++ - 在 C++ 中实例化一个新对象

c++ - 在由另一个构造函数创建的模板类中实例化未使用的构造函数

c - 使用 memcpy 丢弃限定符

c - 如何用鼠标触发Turbo-C中的动画?

c - 如何将函数和变量参数列表传递给 C 中的另一个函数?

Java - 使用 JFileChooser 将字符串路径存储在表中,获取设置方法?

c - void函数(C语言)

c - 从 GtkEntry 获取属性为 "text"的文本