gpt4 book ai didi

c++ - 如何使用指向数组的指针获取数组的大小?

转载 作者:行者123 更新时间:2023-11-30 01:16:05 30 4
gpt4 key购买 nike

我已经阅读了这个答案

Adressing your question - pointer to array is usefull to pass an entire array of compile-time known size and preserve information about its size during argument passing.

但是我不是很懂。在编译时是否已知具有给定大小的数组的大小?如果有指向数组的指针,如何获得数组的大小?举个例子:

void func(int (*array)[5])
{

}

// identical to
void func(int *array, int size)
{

}

你必须把 5 放在那里,那有什么意义呢?除非您已经知道大小,否则您仍然无法对其进行迭代。

最佳答案

Aren't the size of arrays with a given size already known at compile-time?

是的,他们是。

How do you get the size of the array if you have a pointer to it?

你不知道。

You have to put 5 there, so what's the point of it?

它可以防止错误。您只能将正确大小的数组传递给此函数;如果您尝试传递指针或大小错误的数组,编译器将拒绝它。

You still can't iterate over it unless you already know the size.

您可以从数组类型中获取大小:

size_t size = sizeof(*array) / sizeof(**array);      // old school
size_t size = std::extent<decltype(*array)>::value; // C++11 or later
size_t size = std::size(*array); // the future, maybe

或者您可以使该函数成为可用于任何数组大小的模板:

template <size_t N>
void func(int (&array)[N])
{
for (int i : array) // size is known
std::cout << i << '\n';
}

(我还将类型更改为引用而不是指针,以使语法更清晰。您引用的答案可能是针对 C 而不是 C++,在这种情况下没有引用或模板。)

关于c++ - 如何使用指向数组的指针获取数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27318112/

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