[英]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.