【问题标题】:Finding the size of an array through pointers [duplicate]通过指针查找数组的大小[重复]
【发布时间】:2021-02-15 17:15:36
【问题描述】:

我试图通过使用 current_menu 变量来查找 menu1 数组中的元素数,但我没有得到任何结果。我迷失在指针初始之类的事情中......

const char *menu1[] = { "Menu title", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9" };

const char * *current_menu = menu1;

我试过了:

sizeof(*current_menu) / sizeof(*current_menu[0])
sizeof(*(*current_menu)) / sizeof(*(*current_menu)[0])

但是没有任何效果...我该怎么做?

任何帮助将不胜感激!

【问题讨论】:

  • 由于指针的工作方式,您无法通过这种方式获取数组中的元素数量。出于这个原因,C API 通常会存储数组的指针和大小。但是您已将这个问题标记为 C++,因此您应该尝试改用 std::arraystd::vector。对于std::array,大小是类型的一部分,std::vector有一个size成员函数。
  • @churill 确实如此,但我无法理解解释(对不起)......我不确定我是否理解如何编码。
  • 理解这一点的第一步可能是在心理上分离指针和数组。指针可以指向任何地方。例如数组的第一个元素。或者到第二个元素,或者在数组的中间,或者到单个值。或在随机位置或什么都没有(nullptr)。 sizeof编译时进行评估。指针的大小在编译时是固定的,无论它在运行时指向哪里。

标签: c++ arrays pointers


【解决方案1】:

无论数组中有多少元素,指向数组元素的指针的大小始终相同。此外,无论兄弟姐妹的数量如何,指向对象的大小始终相同。因此,您无法使用 sizeof 来使用指针获取数组的长度。

一般来说,没有办法根据指向该数组元素的指针来获取数组中元素的数量。元素的数量以数组的类型编码,因此如果您可以访问数组对象本身,则可以获取长度。标准库为此目的提供了一个有用的函数模板:

std::size_t length = std::size(menu1);

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多