我正在编写一个函数来接受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*的函数的最佳方法是什么?
我以为unsigned char会自动转换为int吗?
一个unsigned char将自动转换为一个int但unsigned 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来容纳这个数字.您将最终访问未经授权的内存,这将立即导致未定义的行为.
| 归档时间: |
|
| 查看次数: |
6006 次 |
| 最近记录: |