可能重复:
如何查找sizeof(指向数组的指针)
我有以下代码
int myfunc(char *arr)
{
const int sizearr = sizeof( arr ) / sizeof(char);
}
Run Code Online (Sandbox Code Playgroud)
这会产生指针的大小,而不是我传递给函数的char数组[17]的大小.
我知道我可以使用strlen和解决该问题,但没有任何方式对字符*ARR指针转换回char数组[17]我传递给函数,以使用的sizeof(char数组[17]) ?
如果要传递17个字符的数组,则需要通过引用传递它(仅限C++):
int myfunc(char (&arr)[17])
{
unsigned int const sizearr = sizeof arr;
// ...
}
Run Code Online (Sandbox Code Playgroud)
或者制作一个模板来推断尺寸:
template <unsigned int sizearr>
int myfunc(char (&arr)[sizearr])
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
在C中,您根本不能将数组作为参数传递,因此您有责任分别传递数组大小.
更新:正如@David建议的那样,您可以通过将指针传递给数组来修复C中的数组类型:
int myfunc(char (*arr)[17])
{
unsigned int const sizearr = sizeof *arr;
// ...
}
int main()
{
char s[17];
return myfunc(&s);
}
Run Code Online (Sandbox Code Playgroud)