表达式必须具有算术类型

时间:2018-01-16 21:35:01

标签: c pointers visual-studio-2015

在尝试编写代码以查找两个数组的交集时,我遇到了一个问题。我似乎无法修改函数内的指针。 在我的find_intersection中,我在执行realloc函数时遇到错误,编译器声明“counter”没有算术值。 关于这里出了什么问题的任何解释?

#include <stdio.h>
#include <stdlib.h>

int quick_sort(int*, int, int);
void swap(int*, int*);
int partition(int *, int, int);
int input_array_dyn(int*n);
int *find_intersection(int*, int*, int*, int, int,int *);

main()
{
int size1, size2, *counter, i=0;
int *arr1 = input_array_dyn(&size1);
int *arr2 = input_array_dyn(&size2);

quick_sort(arr1, 0, size1 - 1);
quick_sort(arr2, 0, size2 - 1);

int *arr3 = (int*)calloc(size2, sizeof(int));
arr3= find_intersection(arr1, arr2, arr3, size1, size2, &counter);

printf("The size of the new array is:%d\n", counter);
while (i < counter)
{
    printf("%d\n", arr3[i]);
    i++;
}
free(arr1);
free(arr2);
free(arr3);
}

int *find_intersection(int *arr1, int *arr2, int *arr3, int SA, int SB, int *counter)
{
int i = 0, j = 0, n = 0;
*counter = 0;

while (i < SA &&j < SB)
{
    if (arr1[i] < arr2[j])
        i++;
    else if (arr2[j] < arr1[i])
        j++;
    else
    {
        arr3[n] = arr1[i];
        i++;
        n++;
        j++;
    }
}
counter = n;
arr3 = (int*)realloc(arr3, counter*sizeof(int));/*error here*/

return arr3;
}

int input_array_dyn(int*n)
{
int i;
int *a;
printf("Enter the size of the array:\n");
scanf("%d", n);
a = (int*)calloc(*n, sizeof(double));
assert(a);
printf("Enter the array elements:%d.\n", *n);
for (i = 0; i < *n; i++)
    scanf("%d", a + i);
return a;
}
void swap(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
int partition(int *arr, int low, int high)
{
int pivot = arr[high];
int i = (low - 1);

for (int j = low; j <= high - 1; j++)
{
    if (arr[j] <= pivot)
    {
        i++;
        swap(&arr[i], &arr[j]);
    }
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}

int quick_sort(int *arr, int low, int high)
{
if (low < high)
{
    int pi = partition(arr, low, high);

    quick_sort(arr, low, pi - 1);
    quick_sort(arr, pi + 1, high);
}
}

2 个答案:

答案 0 :(得分:3)

find_intersection() counter中是指向int的指针。要更改其值,您需要使用*counter而不是counter

答案 1 :(得分:2)

return arr3;尝试返回指向int的指针,而声明函数只返回intcounter是指向int的指针,而您将其作为常规int设置使用为0,依此类推。