Ami*_*avi 2 c++ arrays pointers
在我的c ++程序中,我想将一个数组传递给一个函数,并将该数组的成员打印到控制台.
现在我遇到了两个问题:
int main()
{
unsigned char numbers[8] = { 1,2,3,4,5,6,7,8 };
for (auto i = 0; i < sizeof(numbers); i++)
{
std::cout << numbers[i] << "\n"; // First Problem: Here i get
}
logger(numbers);
}
Run Code Online (Sandbox Code Playgroud)
传递numbers给logger定义为void logger(unsigned char data[])导致类型更改的原因unsigned char *所以没有办法迭代数组,因为大小是未知的.
我的目标也是传递任何大小的数组,但假设数组的大小始终为8,我将签名更改为
logger(&numbers)
void logger(unsigned char(*data)[8])
{
for (auto i = 0; i < sizeof(*data); i++)
{
std::cout << *(data[i]) << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
迭代data有第一个问题,输出是``
所以问题是;
cout.问题在于数组的内容:
unsigned char numbers[8] = { 1,2,3,4,5,6,7,8 };
Run Code Online (Sandbox Code Playgroud)
那些被解释为字符代码(因为数组元素类型).,而不是文字值.很可能使用的字符映射是ASCII,而字符1到8是不可打印的.
要获得表示的字符值1,您需要编写一个字符文字'1'.如果您打算将它们存储并作为数字处理,您可以更改阵列的类型int[8],或者在打印时将其转换为:
std::cout << static_cast<int>(numbers[i]) << "\n";
Run Code Online (Sandbox Code Playgroud)
作为一方,如果您打算使用字符,则应将类型更改为char.
要解决传递任意大小的数组,要么使用模板并传递引用std::array,要么只使用a vector.