gpt4 book ai didi

c++ - 处理数组大小

转载 作者:太空狗 更新时间:2023-10-29 21:29:41 25 4
gpt4 key购买 nike

我碰巧问了自己一个关于 C++ 中数组的问题。嗯,我们都知道数组是一些东西的固定集合,我说固定是因为在定义数组的时候需要声明数组长度。好吧,让我们考虑一个例子:

char myarray[10] = {'\0'};
int sz = sizeof(myarray); // It is supposed to be 10

嗯,没错,10就是sizeof返回的数字。这可以由编译器完成,因为他知道为该变量放置了多少空间。

现在考虑在这种情况下会发生什么:

void dosome(mystruct* arr) {
int elements = sizeof(arr)/sizeof(mystruct);
for (int i = 0; i < elements; i++) {
// Do something hoping no overflow will ever occur
}
}

不错...但我想它可能容易溢出。如果我将以“正常”方式创建的数组传递给此函数,一切都应该没问题:

mystruct array[20];
dosome(array);

没问题。但是如果我这样做:

mystruct* array = (mystruct*)malloc(80*sizeof(mystruct));
dosome(array);

发生了什么?????????????我想了解 sizeof 的行为方式,这个函数是在编译时评估的,对吗???好吧,当我不使用数组,而是使用像那个数据 block 这样非常麻烦的东西时会发生什么?此外,我可以重新分配它值得再次调用 malloc 并要求 dosome 再次处理该数据 block 。它会工作吗?我可以实际尝试一下,但我会得到一些关于 sizeof 行为的确切答案。

谢谢。

最佳答案

mystruct array[20] 例子开始是错误的。因为函数接收的是指针类型,而不是数组类型,所以它无法推断出数组中元素的数量。当您执行 sizeof(arr) 时,您实际上获得了 mystruct* 的大小。

可以使用模板编写将数组作为参数的函数,但如果我没记错的话,C++ 中建议的方法是使用vector

接收数组作为参数的“方式”是这样写:

template <int N> void somefunction(int (&v)[N]);

EDIT 更正了函数声明。糟糕。

关于c++ - 处理数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4277884/

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