C 函数和强制转换警告的类型冲突?

C 函数和强制转换警告的类型冲突?,c,pointers,C,Pointers,我相信对于有c语言指针经验的人来说,这是一个简单的答案,但我现在很难看到我的错误。我得到一个警告,来自函数的返回调用从整数生成指针,即使函数的返回类型是指针。并获取函数具有冲突类型的错误。这是代码,我已经删除了函数体,但仍然得到了错误和警告 long long *merge_sort(long long * arr, int size){ // Arrays shorter than 1 are already sorted if(size > 1){ int middle = s

我相信对于有c语言指针经验的人来说,这是一个简单的答案,但我现在很难看到我的错误。我得到一个警告,来自函数的返回调用从整数生成指针,即使函数的返回类型是指针。并获取函数具有冲突类型的错误。这是代码,我已经删除了函数体,但仍然得到了错误和警告

long long *merge_sort(long long * arr, int size){
// Arrays shorter than 1 are already sorted
if(size > 1){
    int middle = size / 2, i; 
    long long *left, *right;
    left = arr;
    right = arr + middle; 

    left = merge_sort(left, middle);
    right = merge_sort(right, size-middle);
    return merge(left,right);
}else { return arr;  }
}

long long *merge(long long * left, long long * right){

}

您需要在上面声明您的函数
merge
merge\u sort
;当编译器看到对尚未声明的函数的调用时,它会自动假定它返回一个
int

// forward declaration
long long *merge(long long * left, long long * right);

long long *merge_sort(long long * arr, int size){
// Arrays shorter than 1 are already sorted
if(size > 1){
    int middle = size / 2, i; 
    long long *left, *right;
    left = arr;
    right = arr + middle; 

    left = merge_sort(left, middle);
    right = merge_sort(right, size-middle);
    return merge(left,right);
}else { return arr;  }
}

long long *merge(long long * left, long long * right){

}