混淆确定数组的元素编号

时间:2015-10-17 06:44:20

标签: c++ c pointers memory sizeof

我从讲师那里听说,sizeof(某些指针)总是在机器上相等。例如,如果它是64位,则所有指针都是8字节,在32位4字节中。所以,当我想指定像

这样的数组的大小时,我喜欢使用sizeof
int arr[] = {2, 5, -1, 10, 9};
int size = sizeof(arr) / sizeof(int)

我认为上面的代码int需要4,因此20/4会为arr提供一些元素。

int arr[] = {2, 5, -1, 10, 9};
int size = sizeof(arr) / sizeof(int*)

我还假设sizeof(some pointer)需要4,因此20/4再次为arr提供了一些元素。

当我将它应用于double数组时,我很困惑。我认为它应该不起作用。但是,它有效。

double arr[] = {2, 5, -1, 10, 9};
int size = sizeof(arr) / sizeof(double*);

如果每个指针在一台机器中占用相同的大小,那么结果怎么样呢?问题可以解释一下吗? 修改

  

我把* arr和双指针

混合在一起

1 个答案:

答案 0 :(得分:5)

指针的大小不是double数组中元素类型的大小,因为元素double不是指针。

当您将sizeof应用于数组时,如果

,它会给出数组 的大小
double arr[] = {2, 5, -1, 10, 9};

它' S

5 * sizeof(double)

sizeof(double) != sizeof(double *)。因此,要实际获取所需数组中的元素数量

sizeof(arr) / sizeof(double);

但为了使其更易于维护,您可以询问像这样的元素类型的大小

sizeof(arr) / sizeof(*arr);

sizeof(arr) / sizeof(arr[0]);

此外,不要依赖此方法来确定数组中的元素数。请注意,在运行时,无法从中的数组本身知道它,因为它不与数组一起存储。如果要跟踪元素数量,则需要存储该值。

虽然当你第一次想到这一点时看起来很烦人,但凭借你应该学到的经验,这样做会更好。因为它可以让你完全控制程序必须处理的数据,一旦你习惯了它,就很难相信那些只给你数组长度的语言,比如python' {{1} } operator。