首页 > 解决方案 > C中的错误“表达式必须具有指向对象类型的指针”

问题描述

我正在尝试构建一个布尔函数来检查两个未排序的数组是否具有相同的元素。但是每次我尝试调试程序时,我都会收到一个错误“表达式必须有一个指向对象类型的指针”。我已经尝试了一切。似乎没有任何工作。谁能让我知道我做错了什么?


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

bool haveSameElems(arr1, arr2, size);

void main()
{
    int size;

    scanf("%d", &size);
    int* arr1 = (int*)calloc(size, sizeof(int));
    for (int i = 0; i < size; i++)
    {
        scanf("%d ", &arr1[i]);
    }
    int* arr2 = (int*)calloc(size, sizeof(int));
    for (int i = 0; i < size; i++)
    {
        scanf("%d ", &arr2[i]);
    }

    bool ans = haveSameElems(arr1, arr2, size);

    printf("%s", ans ? "true" : "false");
}

bool haveSameElems(arr1, arr2, size)
{
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
            if (arr1[i] == arr2[j]) // I keep getting the error here 
            {
                return true;
            }
        }
    }
}

标签: c

解决方案


根据Frankie_C ,您的函数声明bool haveSameElems(arr1, arr2, size)隐含地与 相同。要将and用作数组,它们必须声明为指针:. 因此,您需要在代码顶部的函数声明和它对应的函数定义中添加这两个星号。始终明确地编写类型而不依赖于Frankie_C 在他的评论中所写的旧 K&R 风格的隐式类型是一种很好的做法。您可以在此处的底部框中和此处的“下标”部分中阅读有关它的更多信息bool haveSameElems(int arr1, int arr2, int size)arr1arr2bool haveSameElems(int *arr1, int *arr2, int size)int

如果您使用的是较旧的 C 编译器,您还需要areturn false在末尾haveSameElems,并且main必须返回类型。int这里


推荐阅读