错误:无法将'unsigned char*'转换为'const int*'

Dzu*_*yen -1 c++

我正在编写一个函数来接受unsigned char*和int*:

int foo(const int * a)
Run Code Online (Sandbox Code Playgroud)

但是当我将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;
}
Run Code Online (Sandbox Code Playgroud)

编写一个接受unsigned char*和int*的函数的最佳方法是什么?

R S*_*ahu 6

我以为unsigned char会自动转换为int吗?

一个unsigned char将自动转换为一个intunsigned char*不会自动转换为int*.

 unsigned char c = 'a';
 unsigned char* cp = &a;

 int i = c;      // This is allowed  
 int* ip = cp;   // This is not allowed
Run Code Online (Sandbox Code Playgroud)

如果允许,你可以这样做:

 *ip = INT_MAX;
Run Code Online (Sandbox Code Playgroud)

但没有足够的空间&c来容纳这个数字.您将最终访问未经授权的内存,这将立即导致未定义的行为.