c - 2 个警告:“int *”与“int **”的间接级别不同,形式参数和实际参数 3 的类型也不同
问题描述
我写了一个代码,它假设删除整数数组中的重复元素而不对其进行排序。
对于该任务,我编写了一个名为“removeDuplicateElements”的函数,它获取一个数组及其字符串,并返回一个动态分配的新数组,该数组实际上是删除了所有重复元素的原始数组。此函数还通过引用返回新数组的大小。
我还在我的代码函数中使用了构建动态数组并打印它的函数。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void printArray(int* arr, int size);
int* buildArray(int size);
int* removeDuplicateElements(int *arr, int size, int *newSize);
void main()
{
int size;
int *newSize;
int *arr;
int *newArr;
printf("please enter a number for the size of array: ");
scanf("%d", &size);
printf("\nenter %d numbers: ", size);
arr = buildArray(size);
printf("\nthe array after removing the duplicate elements is: ");
newArr = removeDuplicateElements(arr, size, &newSize);
size = *newSize;
printArray(newArr, size);
free(newArr);
free(arr);
}
void printArray(int* arr, int size)
{
int i;
for (i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int* buildArray(int size)
{
int i;
int* arr = (int*)malloc(size * sizeof(int));
if (!arr)
{
printf("ERROR! Not enough memory!\n");
exit(1);
}
for (i = 0; i < size; i++)
scanf("%d", &arr[i]);
return arr;
}
int* removeDuplicateElements(int *arr, int size, int *newSize)
{
int *newArr;
int count = size, i, j;
for(i=1;i<size;i++)
for(j=0;j<size;j++)
if (arr[i] == arr[j] && i!=j)
{
count--;
break;
}
newArr = (int*)malloc(count * sizeof(int));
count = 1;
newArr[0] = arr[0];
for (i = 1; i < size; i++)
for (j = 0; j < size; j++)
{
if (arr[i] == arr[j] && i!=j)
break;
else if (j == size - 1)
newArr[count++] = arr[i];
}
*newSize = count;
return newArr;
}
现在,当我运行此代码时 - 我收到以下两个警告:
warning C4047: 'function': 'int *' differs in levels of indirection from 'int **'
warning C4024: 'removeDuplicateElements': different types for formal and actual parameter 3
我试图通过有类似问题的问题寻求帮助,但我仍然不明白出了什么问题以及为什么会收到这些警告。任何帮助,将不胜感激!
解决方案
您正在传递int**
第三个参数,removeDuplicateElements
但接收int*
.
int *newSize;
newArr = removeDuplicateElements(arr, size, &newSize);
你的原型,
int* removeDuplicateElements(int *arr, int size, int *newSize)
应该
int* removeDuplicateElements(int *arr, int size, int **newSize)
或者您可以int*
按照以下方式使用。
int newSize;
newArr = removeDuplicateElements(arr, size, &newSize);
size = newSize;
推荐阅读
- python - 没有名为“matplotlib”Python 的模块
- mobile - jupyter notebook 无法在移动浏览器中正常显示
- javascript - 如何使用Javascript获取具有类名的几个段落的值?
- erpnext - 如何使用子表字段 frappe.get_all()?
- prolog - Prolog - 在二叉树中找到一个共同的祖先
- go - 使用 goroutine 调用函数和在 goroutine 中包装函数代码之间有区别吗?
- php - 此代码适用于 mysql 5.7 及更低版本,但不适用于当前版本。它总是选择最后一个 else 语句
- android - 用于 React Expo 应用程序的 Windows 上的 Android 密钥签名?
- qt - 在 Felgo 中限制/改变身体的角度
- c++ - if 中的多个语句是否与多个 if 相同?