据我所知,C void 指针会自动转换为适当的数据类型。以下是我发现警告的程序:
从不兼容的指针类型初始化[默认启用]
#define ROW 3
#define COL 2
int main()
{
void **ptr = malloc( ROW*COL* sizeof(int) );
int (*p)[COL] = ptr;
int i, j;
for( i = 0; i < ROW; ++i )
for( j = 0; j < COL; ++j )
scanf("%d", &p[i][j]);
for( i = 0; i < ROW; ++i )
{
for( j = 0; j < COL; ++j )
printf("%d ", p[i][j]);
printf("\n");
}
free(ptr);
return 0;
}
但它工作得很好。如果void**
指针类型转换为“指向 COL 大小整数数组的指针”,那么它的行为应该改变并且表现得像 2D 数组?