C++ 将数组传递给函数并读取其成员

标签 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);
}

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 有第一个问题,输出是``

所以问题是;

  1. 为什么我在 cout 处得到一个奇怪的 ASCII 字符。
  2. 我们应该如何处理将数组传递给另一个函数并对其进行迭代,我搜索了很多但没有找到解决方案

最佳答案

问题出在数组的内容上:

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/

相关文章:

c++ - 函数指针 - DInput8.dll Hook 代码参数的用途

用 strstr 不行吗?

c# - 参数无效,正在将字节数组转换为图像

android - RecyclerView 中图像的奇怪行为

c++ - 将 malloc 转换为 new

c++ - 模板元编程 : print type list

c++ - 如何打印属于 map 的一系列元素 (std::pair<size_t, std::string>)(不是所有元素)

c++ - 为什么 regex_match 与我的正则表达式不匹配?

c++ - 这是某种指针错误吗?

c - 硬编码指针值