c - 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;
}
}
}
}
解决方案
根据Frankie_C ,您的函数声明bool haveSameElems(arr1, arr2, size)
隐含地与 相同。要将and用作数组,它们必须声明为指针:. 因此,您需要在代码顶部的函数声明和它对应的函数定义中添加这两个星号。始终明确地编写类型而不依赖于Frankie_C 在他的评论中所写的旧 K&R 风格的隐式类型是一种很好的做法。您可以在此处的底部框中和此处的“下标”部分中阅读有关它的更多信息。bool haveSameElems(int arr1, int arr2, int size)
arr1
arr2
bool haveSameElems(int *arr1, int *arr2, int size)
int
如果您使用的是较旧的 C 编译器,您还需要areturn false
在末尾haveSameElems
,并且main
必须返回类型。int
见这里。
推荐阅读
- firebase - 错误:Firebase cURL 查询中未定义索引,即使在更新数据库规则之后也是如此
- php - Mysql 错误 PDOStatement::execute(): MySQL server has gone away using Laravel and curl request
- python - 使用 rc.local 启动时找不到 python 3.7 模块 smbus2
- neo4j - Neo4j Graph中如何减少Louvain算法的运行时间和内存占用?
- swift - Xcode 11.3:无法选择部署目标 13.3
- c# - 如何处理数据库中的字符串枚举?
- java - 我在 mongodb 中有 100 万条记录无法获取记录
- chart.js - 是否可以在 chart.js 中添加将您定向到 url 的点击事件?
- ruby-on-rails - 未经允许的参数:使用 Google Cloud Storage 保存图像时的格式
- javascript - 使用 YouTube Search API 查询视频 ID 导致配额成本高