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;i std::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";
}
}