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

C++中如何从指针还原数组?程序仅接受数组类型的问题

如何将指针转换为指定长度的数组类型(C++)

你需要将指向数组的指针转换为对应长度的数组类型,从而直接操作整个数组,以下是几种可行的方法:

方法一:转换为数组引用

通过static_cast将指针解引用的结果转换为数组类型的引用,保留数组的长度信息:

#include <typeinfo>
#include <iostream>

int main() {
    int i[10];
    int* k = i;

    // 转换为int[10]类型的引用
    int (&arr_ref)[10] = static_cast<int(&)[10]>(*k);
    
    std::cout << typeid(arr_ref).name() << '\n'; // 输出int [10]
    
    // 直接操作整个数组
    for (int idx = 0; idx < 10; ++idx) {
        arr_ref[idx] = idx * 2;
    }
    return 0;
}

方法二:使用类型别名简化代码

如果需要多次使用目标数组类型,先定义类型别名让代码更易读:

#include <typeinfo>
#include <iostream>

// 定义int[10]类型的别名
using IntArray10 = int[10];

int main() {
    int i[10];
    int* k = i;

    IntArray10& arr_ref = static_cast<IntArray10&>(*k);
    std::cout << typeid(arr_ref).name() << '\n'; // 输出int [10]
    return 0;
}

方法三:转换为指向数组的指针

若需要指向整个数组的指针而非引用,用reinterpret_cast转换为数组指针类型:

#include <typeinfo>
#include <iostream>

int main() {
    int i[10];
    int* k = i;

    // 转换为指向int[10]的指针
    int (*arr_ptr)[10] = reinterpret_cast<int(*)[10]>(k);
    
    std::cout << typeid(*arr_ptr).name() << '\n'; // 输出int [10]
    
    // 通过数组指针访问元素
    (*arr_ptr)[5] = 100;
    return 0;
}

注意事项

  • 必须确保指针k确实指向长度为10的int数组,否则强制转换会触发未定义行为(如越界访问、内存错误等)。
  • 数组类型信息在编译期确定,必须提前明确数组长度,无法在运行期动态转换。

内容的提问来源于stack exchange,提问作者nonsqu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:45:28