刚学编程一个月,报错一堆QAQ
写了一个归并排序,但是在函数中访问数组时总会报错(表达式必须包含指向对象的指针类型,但它具有类型“int”)或者(下标要求数组或指针类型)
#include<stdio.h>
#include<stdlib.h>
void print_arr(int arr[], int len)
{
int i;
for (i = 0; i <= len; i++);
{
printf("%d", arr[i]);
}
}
void merge(int arr, int tempArr, int left, int mid, int right)
{
int l = left; //左边数组的起点
int r = mid + 1; //右边数组的起点
int p = left; //缓存数组的起点
while (l <= mid && r <= right)
{
if (arr[l] < arr[r])
{
tempArr[p++] = arr[l++];
}
else
tempArr[p++] = arr[r++];
}
while (l <= mid)
{
tempArr[p++] = arr[l++];
}
while (r <= right)
{
tempArr[p++] = arr[r++];
}
while (left <= right)
{
arr[left] = tempArr[left];
left++;
}
}
void msort(int arr[], int tempArr[], int left, int right)
{
//只有一个元素本身有序
if (left < right)
{
int mid = (left + right) / 2;
msort(arr, tempArr, left, mid);
msort(arr, tempArr, mid + 1, right);
merge(arr, tempArr, left, mid, right);
}
}
//入口
void merge_sort(int arr[], int len)
{
int* tempArr = (int*)malloc(len * sizeof(int)); //需要手动申请缓存数组的内存
if (tempArr != NULL)
{
msort(arr, tempArr, 0, len - 1);
free(tempArr);
}
else
printf("error\n");
}
int main()
{
int arr[10];
printf("Please enter ten number\n");
for (int i = 0; i <= 10; i++)
{
scanf_s("%d", &arr[i]);
}
merge_sort(arr, 10);
print_arr(arr, 10);
return 0;
}
以下是报错列表(无助.jpg)