【发布时间】:2014-12-02 08:23:03
【问题描述】:
我正在编写一个函数来接受 unsigned char* 和 int*:
int foo(const int * a)
但是,当我将 unsigned char * a 传递给 foo() 时,它会出现此编译错误。我认为 unsigned char 会自动转换为 int 吗? (较小的范围变量将被转换为较大的变量)。它也适用于数组指针吗?
示例代码:
#include <iostream>
using namespace std;
int average(const int * array, int size)
{
int sum = 0;
for (int i = 0; i <size; i++)
sum+=*(array+i);
return sum/size;
}
int main() {
unsigned char array[5] = {0,1,2,3,4};
std::cout << average(array, 5);
return 0;
}
编写一个同时接受 unsigned char* 和 int* 的函数的最佳方法是什么?
【问题讨论】:
-
MCVE 有空吗?!!
-
你的函数不接受
int它接受int*这是一个不同的类型。char可能会转换为int,但char*和int*并非如此。 -
不,没有从
unsigned char*到int*的隐式转换(不是“强制转换”;强制转换是指定转换的显式运算符)。 -
您说的是积分促销。但是指针不属于整数类型,并且对指针进行这些转换也会带来一些令人讨厌的安全问题。
-
您有什么理由选择
*(array+i)而不是array[i]?对我来说似乎没有必要。
标签: c++