sizeof - 将指针转换为数组

Joh*_*ing 0 c c++

可能重复:
如何查找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]) ?

Ker*_* SB 6

如果要传递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)