C99中如何解引用多层指针数组的ptr0以访问最终整数元素?
解决方案:通过ptr0解引用访问所有整数元素
你的代码采用了多层void指针嵌套结构,由于void*无法直接解引用,必须先强制转换为对应类型的指针,才能访问底层的整数元素。下面提供两种可行的实现方式:
方式一:单层循环+索引分解
利用总元素数27=3×3×3的特点,将循环变量i分解为三个层级的索引,逐层定位到目标整数:
for (int i = 0 ; i <27 ; i++) { int a = i / 9; // Level1 数组索引(0-2) int b = (i %9)/3; // Level2 数组索引(0-2) int c = i %3; // Level3 整数数组索引(0-2) // 逐层转换并解引用:void*** → void** → void* → int* → int int val = ((int*)ptr0[a][b])[c]; printf("%d ", val); }
方式二:三层嵌套循环(可读性更强)
用嵌套循环对应三层数组的结构,逻辑更直观,不容易出错:
for (int a = 0; a < 3; a++) { // 遍历Level1的array1元素 for (int b = 0; b < 3; b++) { // 遍历Level2的arrays_2_x元素 int* int_arr = (int*)ptr0[a][b]; // 将void*转为int数组指针 for (int c = 0; c < 3; c++) { // 遍历Level3的int数组元素 printf("%d ", int_arr[c]); } } }
关键细节说明
ptr0[a]等价于*(ptr0 + a),获取Level1的元素(void**类型,指向Level2的数组)ptr0[a][b]等价于*(*(ptr0 + a) + b),获取Level2的元素(void*类型,指向Level3的int数组)- 必须将
void*强制转换为int*才能访问整数元素——C语言不允许直接对void*进行指针算术或解引用操作
内容的提问来源于stack exchange,提问作者MSamyGawad
相关产品推荐
相关产品推荐

