【发布时间】:2019-01-04 12:42:36
【问题描述】:
在我的 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 字符。 - 我们应该如何处理将数组传递给另一个函数并对其进行迭代,我搜索了很多但没有找到解决方案
【问题讨论】:
-
char c = 1;和char c = '1';有区别 -
将数组的长度作为第二个参数传递怎么样?
-
这是使用
std::array或std::vector代替的一个原因。或者,如果您必须 使用数组,则将大小作为参数传递。或者使用"size of array" template function。 -
顺便说一句,如果你有指向数组版本的指针,那么
*(data[i])是不正确的。 -
试试这个,
std::cout << +numbers[i] << "\n";