sizeof - 将指针转换为数组
sizeof - convert a pointer to an array
可能的重复项:
如何查找 sizeof(指向数组的指针)
我有以下代码
int myfunc(char *arr)
{
const int sizearr = sizeof( arr ) / sizeof(char);
}
这会产生指针的大小,而不是我传递给函数的 char 数组[17] 的大小。
我知道我可能会使用 strlen 并解决问题,但是有没有办法将 char*arr 指针转换回我传递给函数的 char 数组[17]以使用 sizeof(char array[17])?
如果要传递一个包含 17 个字符的数组,则需要通过引用传递它(仅限C++):
int myfunc(char (&arr)[17])
{
unsigned int const sizearr = sizeof arr;
// ...
}
或者做一个模板来推断大小:
template <unsigned int sizearr>
int myfunc(char (&arr)[sizearr])
{
// ...
}
在 C 中,您根本不能将数组作为参数传递,因此您有责任单独传达数组大小。
更新:正如@David所建议的,您可以通过传递指向数组的指针来修复 C 中的数组类型:
int myfunc(char (*arr)[17])
{
unsigned int const sizearr = sizeof *arr;
// ...
}
int main()
{
char s[17];
return myfunc(&s);
}
不,没有这样的方法。但是在C++中,您可以按数组大小参数化函数模板,并通过引用传递数组:
template <size_t size> void myfunc(char (&arr)[size])
{
for(size_t i = 0; i < size; ++i) std::cout << arr[i];
}
// Usage
char array[] = "My char array";
myfunc(array);
No.
没有这样的办法。类型 char *
不包含有关"源"(即数组)的任何信息。这就是为什么说数组"衰减"成指针的原因;指针包含的信息少于数组。
此外,sizeof (char)
为 1。
不是真的,因为一旦数组衰减到指针,有关其"原始"形式的所有信息都会丢失。您始终可以将指针投射到char[17]
但这是不好的做法。
如果确实需要数组,请更改函数签名以接受数组。
相关文章:
- 如何在C++中将数组转换为矢量指针
- 将C++中的数组转换为字符串
- NLOHMANN 的 JSON 库将数组转换为结构向量
- 将 int 数组转换为 std::vector<int*>
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 将字符数组转换为时间结构
- 将字节数组转换为多维数组
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- C++如何将字符数组转换为字节向量(向量<byte>)
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 无法将字符数组转换为包含 utf-8 字符的字符串
- 如何使用 C++将 2D RGB 数组转换为 dds 文件?
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 将 int 数组转换为带有小数C++的双精度数组
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- 将字符数组转换为整数值