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

C语言合并两个有序数组时int**传参int*类型不兼容警告的修复方法

问题核心

编译器警告的直接原因是指针类型不匹配:

  • 在main函数中存储合并结果的数组被声明为int **v3,同时通过malloc(t3 * sizeof(int *))申请的是存放int *类型元素的空间,本质是一个存指针的数组,返回值类型为int **。
  • 自定义的interc2w、printVec函数要求传入的数组合法参数是int *(指向普通int元素的指针),将int **类型的变量传入自然触发类型不兼容警告。
修正方案

仅需调整动态分配合并结果数组的逻辑,两处核心修改点:

  • 把数组的指针类型从int **改为int *——因为数组要存的是普通整数,不是int指针。
  • 把malloc申请的空间大小从t3 * sizeof(int *)改为t3 * sizeof(int)——申请和整数元素匹配的空间大小。

调整后,v3的类型为int *,和函数要求的参数类型完全匹配,警告会直接消除,原有的递归合并逻辑无需改动即可正常工作。
补充优化:动态申请的内存需要用free(v3)手动释放,避免内存泄漏。

修正后完整可运行代码
#include <stdio.h>
#include <stdlib.h>

void printVec(int v[], int t){
    printf("[ ");
    for(int i = 0; i < t; i++){
        printf("%d ", v[i]);
    }
    printf("]");  
}

void interc2w(int a[], int ta, int b[], int tb, int c[], int tc, int i, int j, int k){
    if(k < tc){
        if(i < ta && j < tb) {
            if(a[i] < b[j]) {
                c[k] = a[i];
                interc2w(a, ta, b, tb, c, tc, i+1, j, k + 1);
                }
            else {
                c[k] = b[j];
                interc2w(a, ta, b, tb, c, tc, i, j+1, k + 1);
                }
            } else{
                if(i == ta) {
                    c[k] = b[j];
                    interc2w(a, ta, b, tb, c, tc, i, j+1, k + 1);
                }
                else if(j == tb) {
                    c[k] = a[i];
                    interc2w(a, ta, b, tb, c, tc, i+1, j, k + 1);
                }
                }
        } else return;
}

int main(){
    int v1[] = {5,12,19,21,30,50}, v2[] = {2,4,6,8,10,13,15,20,25,60};
    int t1 = (sizeof(v1)/sizeof(v1[0])), t2 = (sizeof(v2) / sizeof(v2[0])), t3 = t1 + t2;
    // 替换原错误的动态分配逻辑:int **v3 = malloc(t3 * sizeof(int *));
    int *v3 = malloc(t3 * sizeof(int));
    printf("Vetor 1: ");
    printVec(v1, t1);

    interc2w(v1, t1, v2, t2, v3, t3, 0, 0, 0);

    printf("\n\nVetor 2: ");
    printVec(v2, t2);

    printf("\n\nVetor 3 intercalado: ");
    printVec(v3, t1 + t2);
    
    free(v3);
    return 0;
} 
运行验证

修正后程序无编译警告,可正确输出两个有序数组的升序合并结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 12:24:04