簡體   English   中英

C:從void *讀取int **

[英]C: Reading int** from void*

所以我試圖定義一個通用的ADT。 我有一個看起來像這樣的結構:

struct grid_type{
    void* table;
    int startX, startY, endX, endY, xDim, yDim;
};

如您所見,我有一個void指針,該指針應該能夠存儲各種數據類型。 對於這種情況,我試圖指向此函數返回的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");
    }
}

這就是一切的主要過程:

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");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM