在我的 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);
}
将 numbers
传递给定义为 void logger(unsigned char data[])
的 logger
导致类型更改为 unsigned char *
因此无法遍历数组,因为大小未知。
我的目标也是传递任何大小的数组,但假设数组的大小始终为 8,我将签名更改为
logger(&numbers)
void logger(unsigned char(*data)[8])
{
for (auto i = 0; i < sizeof(*data); i++)
{
std::cout << *(data[i]) << "\n";
}
}
遍历 data
有第一个问题,输出是``
所以问题是;
- 为什么我在
cout
处得到一个奇怪的 ASCII 字符。 - 我们应该如何处理将数组传递给另一个函数并对其进行迭代,我搜索了很多但没有找到解决方案
最佳答案
问题出在数组的内容上:
unsigned char numbers[8] = { 1,2,3,4,5,6,7,8 };
那些被解释为字符代码(因为数组元素类型),而不是文字值。很可能使用的字符映射是 ASCII,字符 1 到 8 不可打印。
要获取表示1
的字符值,您需要编写字 rune 字'1'
。如果您打算将它们作为数字存储和处理,您可以将数组的类型更改为 int[8]
,或者在打印时转换它们:
std::cout << static_cast<int>(numbers[i]) << "\n";
另一方面,如果您打算使用字符,则应将类型更改为 char
。
要解决传递任意大小数组的问题,要么使用模板并传递对 std::array
的引用,要么简单地使用 vector
。
关于C++ 将数组传递给函数并读取其成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54039205/