函数参数类型不匹配错误场景
- 形参与实参类型不一致:在调用函数时,提供的实参类型与函数声明中的形参类型不匹配。例如函数声明接受
int
类型参数,但调用时传入 double
类型。
- 数组参数与指针参数混淆:函数声明期望一个数组作为参数,但调用时传递的是指针,或者反过来。由于在函数参数列表中数组会衰减为指针,容易在实际处理中出现误解。
- 函数指针类型不匹配:当使用函数指针调用函数时,函数指针的类型必须与目标函数的类型严格匹配,包括参数类型和返回类型。如果不匹配,就会导致未定义行为。
避免方法示例
- 形参与实参类型不一致的避免方法
#include <iostream>
// 函数声明
void printInt(int num) {
std::cout << "The number is: " << num << std::endl;
}
int main() {
double numDouble = 3.14;
// 错误调用,会隐式转换,可能丢失精度
// printInt(numDouble);
// 正确做法,先进行类型转换
printInt(static_cast<int>(numDouble));
return 0;
}
- 数组参数与指针参数混淆的避免方法
#include <iostream>
// 函数声明,接受数组参数
void printArray(int arr[], size_t size) {
for (size_t i = 0; i < size; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int* ptr = arr;
// 正确调用
printArray(arr, 5);
// 明确意图,使用指针调用时要清楚其指向的是数组首元素
printArray(ptr, 5);
return 0;
}
- 函数指针类型不匹配的避免方法
#include <iostream>
// 目标函数
int add(int a, int b) {
return a + b;
}
int main() {
// 正确定义函数指针类型
int (*funcPtr)(int, int) = add;
// 错误定义,类型不匹配,如返回类型不一致
// bool (*wrongFuncPtr)(int, int) = add;
int result = funcPtr(3, 5);
std::cout << "Result: " << result << std::endl;
return 0;
}