You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:30:34