作为函数参数传递的数组的大小
sizeof an array passed as function argument
可能重复:
函数自变量中数组的长度
嗨,我正在做作业,我完全被难住了。我们假设列表的每个顺序都是一个整数数组,所以我根据老师的伪代码写了这段代码:
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
我唯一不确定的是sizeof(v)/sizeof(int)
是否是正确的选择。
sizeof(v)/sizeof(int)
不是一条路。您的功能完全等效于:
void permute(int *v, int curr, char *letters)
{
...
}
即v
实际上不是一个数组,而是一个指针。不能在C或C++中传递数组。
解决方案如下(并非详尽无遗(:
- 添加一个显式描述数组长度的额外参数
- 添加一个指向数组最后一个元素的额外参数
- 使用适当的容器(例如
std::vector
(,可以在上调用size()
- @sehe建议的模板解决方案
我最讨厌的一件事是:你可以用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
除了Oli的答案外:C++中的典型方法是将一个指针传递到要排列的序列的开头和结尾。按照惯例,起始指针是包含的,结束指针是排他的。
void permute(int *v, int *begin, int *end, char *letters) {
if (begin == end) {
checkit(v, end, letters);
} else {
...
permute(v, begin + 1, end, letters);
...
}
}
相关文章:
- 堆栈和队列是否像C++中的数组一样传递?
- C++函数模板需要 &for 数组参数
- 如何正确使用 fstream 并在 char 数组中传递数据?
- 使用IPC/共享内存将Integer数组从C++传递到Python
- 将数组正确传递给函数 C++
- 将动态数组/矩阵传递给函数进行初始化
- 如何将结构数组从 c++ 传递到 c#?
- 将字节数组从 C++ 传递到 Python
- 2D数组值像数组一样传递,0不打印
- std::string 参数是如何从原始字符数组文本传递的
- C++ 数组参数不起作用
- 使用 C++/CLI 包装器将 2D 数组从 C# 传递到非托管C++
- 使用数组参数进行函数专用化
- 将 2d 数组从 c++ 传递到 qml
- 为什么我的数组参数的方法无法正常工作?(C )
- 使用SWIG Directors将数组从C 传递到Java
- 将数组指针传递到函数时出错
- pthread_create将动态矢量数组中传递到参数中
- C++将数组参数传递给函数
- 通过引用传递数组参数