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
相关产品推荐
相关产品推荐

