gpt4 book ai didi

c++ - 在 C++ 的二维数组中通过引用传递有问题

转载 作者:搜寻专家 更新时间:2023-10-31 00:03:09 25 4
gpt4 key购买 nike

我有一个名为 names 的变量,它是一个二维数组。我像下面这样声明它,这样最多有 5 个名字,每个名字由 256 个字符组成。

int main(){
char names[5][256];
strcpy(names[0],"John");
strcpy(names[1],"Matt");
printf("%d\n",sizeof(names)/256); //this prints out 5 which is correct
passit(names);
}

void passit(char names[][256]){
printf("%d\n",sizeof(names)/256); //this prints out 8 which seems to be a size of pointer
}

我应该如何更改它以便在 passit 函数中正确打印元素数量?

最佳答案

您的代码是 C 风格的。如果您真的在编写 C++,那么我建议使用 std::coutstd::vectorstd::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("%d\n", N);
}

关于c++ - 在 C++ 的二维数组中通过引用传递有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com