Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;将数组传递给函数并读取其成员 在我的C++程序中,我想把数组传递给函数,并将数组的成员打印到控制台。_C++_Arrays_Pointers - Fatal编程技术网

C++;将数组传递给函数并读取其成员 在我的C++程序中,我想把数组传递给函数,并将数组的成员打印到控制台。

C++;将数组传递给函数并读取其成员 在我的C++程序中,我想把数组传递给函数,并将数组的成员打印到控制台。,c++,arrays,pointers,C++,Arrays,Pointers,现在我遇到了两个问题: 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); } 迭代数据

现在我遇到了两个问题:

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);
}
迭代
数据
有第一个问题,输出是``

所以问题是,

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

  • 问题在于数组的内容:

    unsigned char numbers[8] = { 1,2,3,4,5,6,7,8 };
    
    这些被解释为字符代码(因为数组元素类型),而不是文字值。最可能使用的字符映射是ASCII,字符1到8不可打印

    要获取表示
    1
    的字符值,需要编写一个字符文本
    '1'
    。如果要将它们存储并作为数字处理,可以将数组类型更改为
    int[8]
    ,或在打印时强制转换它们:

    std::cout << static_cast<int>(numbers[i]) << "\n";
    

    std::cout对于您的第一个问题使用:

     int arr_size = sizeof(numbers)/sizeof(numbers[0]);
    

    不能将数组传递给C++中的函数。有几种方法可以解决这个问题

    1) 使用向量而不是数组

    2) 传递对数组的引用(这仅适用于固定大小的数组)

    3) 传递指向数组第一个元素的指针(这需要将大小作为单独的参数传递)

    下面是你如何做到这三点的

    1) 使用向量

    #include <vector>
    
    std::vector<unsigned char>{1,2,3,4,5,6,7,8}:
    logger(numbers);
    
    void logger(const vector<unsigned char>& data)
    {
      for (auto i = 0; i < data.size(); i++)
      {
        std::cout << (unsigned)data[i] << "\n";
      }
    }
    
    #包括
    std::向量{1,2,3,4,5,6,7,8}:
    记录器(数字);
    空隙记录器(常数向量和数据)
    {
    对于(自动i=0;istd::char c=1;
    char c='1';
    作为第二个参数传递数组的长度如何?这是使用
    std::array
    std::vector
    的原因之一。或者如果必须使用数组,则将大小作为参数传递。或者使用a。顺便说一下,使用p您拥有的从指针到阵列的版本,则
    *(数据[i])
    不正确。请尝试此操作,
    std::cout是的,我知道,但这是一个更大项目的一部分,需要一个字节号,没有其他类型可供选择use@Amir-穆萨维我的回答也涉及到这一点。
    
    #include <vector>
    
    std::vector<unsigned char>{1,2,3,4,5,6,7,8}:
    logger(numbers);
    
    void logger(const vector<unsigned char>& data)
    {
      for (auto i = 0; i < data.size(); i++)
      {
        std::cout << (unsigned)data[i] << "\n";
      }
    }
    
    unsigned char numbers[8] = { 1,2,3,4,5,6,7,8 };
    logger(numbers);
    
    void logger(unsigned char (&data)[8])
    {
      for (auto i = 0; i < 8; i++)
      {
        std::cout << (unsigned)data[i] << "\n";
      }
    }
    
    unsigned char numbers[8] = { 1,2,3,4,5,6,7,8 };
    logger(numbers, 8);
    
    void logger(unsigned char *data, size_t size)
    {
      for (auto i = 0; i < size; i++)
      {
        std::cout << (unsigned)data[i] << "\n";
      }
    }