【问题标题】:How to know what is the length of pointer in array of pointers?如何知道指针数组中指针的长度是多少?
【发布时间】:2017-04-05 23:07:33
【问题描述】:

我有 5 个数组和一个指针数组,我需要知道指针数组中每个数组的长度(不是 sizeof)。 我是怎么做到的?

int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 5 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int* arr6[] = { arr1, arr2, arr3, arr4, arr5 };

【问题讨论】:

  • 基于这个作业的所有以前的版本,不是在数组本身中找到答案吗?
  • 恐怕你不能。一旦转换为int*,它们的大小将不可撤销地丢失给编译器。在运行时,整数数组没有大小的概念。您应该:将它们的大小记录在其他地方,或者隐式编码(例如,最后一个元素应该始终是一些指定的,否则不使用的常量,如0 或-1)。
  • 不是很重复,但是这个问题似乎对这个作业有更好的理解stackoverflow.com/questions/43191792/…

标签: c arrays pointers


【解决方案1】:

一旦数组 被转换为指针(如数组arr6 的元素),就无法找到其中元素的数量(在原始数组中)。 一个简化的版本是:

int arr1[] = { 3, 9, 6, 7 };
int *p = arr1;
/* Now, there's no way to know the number of elements in arr1 solely
   from the pointer 'p' */

要么您自己保留尺寸信息。一种方法是为大小设置另一个数组:

int* arr6[] = { arr1, arr2, arr3, arr4, arr5 };
size_t sz_arr6[] = {sizeof arr1/sizeof arr1[0], sizeof arr2/sizeof arr2[0], ...};

这个你知道的索引,你知道sz_arr6[i]对应arr6[i]中的元素个数等等。

【讨论】:

    【解决方案2】:

    在 C++17 中,这很简单:std::size(arr),来自 <iterator>。

    在此之前,使用std::distance(std::begin(arr), std::end(arr))(使用相同的标头)。

    【讨论】:

    • 我认为 OP 想要数组在 arr6 之后的长度(转换为指针)。比如,arr6[0] 中有多少项目?
    • 是的,我想知道他们在 arr6[0] 或 arr6[1] 中有多少项目
    • @user7415633:你为什么不提这么一个基本的东西? :-S
    【解决方案3】:

    您拥有的是指向数组第一项的指针。由此,无法判断数组一般有多长。

    您还必须跟踪长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多