sizeof作为函数参数传递的数组

Tra*_*tto 7 c++ recursion

可能重复:
函数参数中的数组长度

嗨,我正在做作业,我完全难过.我们假设让列表的每个顺序都是一个整数数组,所以我根据老师的伪代码编写了这段代码:

void permute(int v[], int curr,char letters[])
{
    if(curr >= sizeof(v)/sizeof(int))
    {
        checkit(v,letters);
    }
    for(int i = curr; i < sizeof(v)/sizeof(int); i++)
    {
        swap(i,curr,v);
        permute(v,curr + 1,letters);
        swap(v[curr],v[i]);
    }//for
}//permu
Run Code Online (Sandbox Code Playgroud)

我唯一不确定的是,是否sizeof(v)/sizeof(int)是正确的方法.

Oli*_*rth 9

sizeof(v)/sizeof(int)不是要走的路.你的功能完全等同于:

void permute(int *v, int curr, char *letters)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

v不是一个真正的数组,它是一个指针.您无法在C或C++中传递数组.

解决方案是以下之一(并非详尽无遗):

  • 添加一个明确描述数组长度的额外参数
  • 添加一个指向数组最后一个元素的额外参数
  • 使用适当的容器(例如std::vector),您可以调用size()
  • @sehe建议的模板解决方案

  • @Adrian:C99,6.3.2.1,第3段:"除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则表达式具有类型''数组类型''转换为类型''指向类型''"的表达式. (2认同)

seh*_*ehe 5

我的一个烦恼是:你可以让C++为你推断数组大小

template <size_t N>
void permute(int (&v)[N], int curr,char letters[])
{
    if(curr >= N)
    {
        checkit(v,letters);
    }
    for(int i = curr; i < N; i++)
    {
        swap(i,curr,v);
        permute(v,curr + 1,letters);
        swap(v[curr],v[i]);
    }//for
}//permu
Run Code Online (Sandbox Code Playgroud)