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

C语言实现数组反转时int值无法存入int*指针 报类型转换错误如何解决

C语言数组反转函数类型转换与存值问题解决

核心错误原因

  • 存值写法错误:ReverResult=(z+rever)属于对指针变量本身直接赋值,本质是把int类型的z+rever计算结果强制当地址赋值给指针,自然会报类型不匹配错误。你需要给ReverResult指向的数组对应下标位置的元素赋值,而非修改指针本身的地址。
  • 数组访问越界隐患:你当前rever初始值设为Ne,第一次循环执行*(ptr+rever)时访问的是原数组末尾之后的内存,属于未定义行为,现在打印结果正确只是偶然情况,严格来说初始值应该设为Ne-1才符合数组下标规则。

修改方案

正确存值写法

循环内直接用循环变量i作为结果数组的下标赋值即可:

ReverResult[i] = z;
// 等价指针写法:*(ReverResult + i) = z;

修正后的完整函数

int* reversevec(int* ptr, unsigned int Ne){
    // 空指针校验,避免非法访问崩溃
    if (ptr == NULL || Ne == 0) {
        return NULL;
    }
    int* ReverResult = (int*)malloc(Ne * sizeof(int));
    // 内存分配失败校验
    if (ReverResult == NULL) {
        return NULL;
    }
    // 初始偏移改为Ne-1,避免越界访问原数组
    unsigned int rever = Ne - 1, z;
    for (int i = 0; i < Ne; ++i) {
        z = *(ptr + rever);
        printf("%i ", z);
        // 正确存值到结果数组对应位置
        ReverResult[i] = z;
        rever--;
    }
    return ReverResult;
}

额外注意事项

  • 调用该函数拿到返回的数组指针使用完毕后,需要手动调用free()释放内存,避免内存泄漏。
  • 如果不需要保留原数组,也可以直接在原数组上做原地反转,不需要额外申请内存空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:36:01