c++中二维数组中引用传递的问题
Having a problem with pass by reference in two dimensional array in c++
我有一个叫做names
的变量,它是一个二维数组。我像下面这样声明它,以便最多有5个名称,每个名称将由256个字符组成。
int main(){
char names[5][256];
strcpy(names[0],"John");
strcpy(names[1],"Matt");
printf("%dn",sizeof(names)/256); //this prints out 5 which is correct
passit(names);
}
void passit(char names[][256]){
printf("%dn",sizeof(names)/256); //this prints out 8 which seems to be a size of pointer
}
我该如何改变这一点,以便在passit
函数中,元素的数量将正确打印?
你的代码是c风格的。如果你真的在写c++,那么我建议使用std::cout
, std::vector
和std::string
:
void passit(std::vector<std::string> const& names) {
std::cout << names.size();
}
int main() {
std::vector<std::string> names(5);
names[0] = "John";
names[1] = "Matt";
std::cout << names.size();
passit(names);
}
否则,您可以对现有代码执行中间修复。
正如您所发现的,当您尝试通过值传递数组时,它实际上会衰减为指针(在本例中为char(*)[256]
),并且您会丢失有关第一个维度大小的所有信息。
通过引用传递数组避免了这种情况,除了你现在必须指定完整的数组类型,包括所有数组维度;然后,模板参数推导使此操作自动执行:
template <size_t N>
void passit(char (&names)[N][256]) {
printf("%dn", N);
}
相关文章:
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- Xcode 语义问题引用或以前定义的代码
- C++ 关于指针取消引用的技术问题
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 棘手的按值传递和按引用递归问题传递
- 当我尝试通过 arduino 上的引用传递布尔数组时出现问题
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 取消引用向量时出现问题
- 有关从C++中的不同源文件引用类的问题
- C++:取消引用十六进制值,有点语法问题
- 运行veins_inet示例 - 未定义的引用的 Omnet++ 问题
- C++ - 对 PCM::getInstance() 的未定义引用问题
- 通过键入的引用问题传递函数
- 一个关于继承和引用的C++问题
- 关于引用数组位置的问题
- printf(时差程序)中的引用问题
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- "Field has incomplete type"引用自己的类的问题
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 使用 opencv 和 C++ - 未定义的引用的链接器出现问题