C++ sizeof-将指针转换为数组
可能重复: 我有以下代码C++ sizeof-将指针转换为数组,c++,c,C++,C,可能重复: 我有以下代码 int myfunc(char *arr) { const int sizearr = sizeof( arr ) / sizeof(char); } 这会产生指针的大小,而不是我传递给函数的字符数组[17]的大小 我知道我可以使用strlen来解决这个问题,但是有没有办法将char*arr指针转换回我传递给函数的char数组[17],以便使用sizeofchar数组[17]?否 没有这样的办法。类型char*不包含任何有关源(即数组)的信息。这就是为什么说数组会退
int myfunc(char *arr)
{
const int sizearr = sizeof( arr ) / sizeof(char);
}
这会产生指针的大小,而不是我传递给函数的字符数组[17]的大小
我知道我可以使用strlen来解决这个问题,但是有没有办法将char*arr指针转换回我传递给函数的char数组[17],以便使用sizeofchar数组[17]?否
没有这样的办法。类型char*不包含任何有关源(即数组)的信息。这就是为什么说数组会退化为指针;指针的信息少于数组
另外,sizeof char是1。不是真的,因为一旦数组有了关于其原始形式的所有信息,就丢失了。您总是可以将指针投射到字符[17],但这是一种糟糕的做法
如果您确实需要一个数组,请更改函数签名以接受数组。
如果要传递17个字符数组,则只需要通过引用C++传递:int myfunc(char (&arr)[17])
{
unsigned int const sizearr = sizeof arr;
// ...
}
或者制作一个模板来推断尺寸:
template <unsigned int sizearr>
int myfunc(char (&arr)[sizearr])
{
// ...
}
不,没有这种办法。但是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);
字符的FYI大小为1。所以这无论如何都不行。+1恢复大小的方法是永远不要松开它:在C中,如果通过指针传递数组,基本上也可以这样做,但大小将在编译时固定@DavidRodríguez dribeas:关于按地址传递数组的观点很好。我加上了!
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);