【问题标题】:Calculating the size of the array gives variable output [duplicate]计算数组的大小给出变量输出[重复]
【发布时间】:2021-08-02 01:01:51
【问题描述】:

我正在使用以下代码计算数组的大小

int  arr[] = {1, 2, 3, 4, 5, 6};
int size = *(&arr + 1) - arr;

这给了我 6 作为输出。但是,当我使用相同的代码创建函数时,大小变为-8。这种行为的原因可能是什么。

int sizeArr(int arr[])
{
    int size = *(&arr + 1) - arr;
    return size;
}

【问题讨论】:

标签: c++ pointers c++14


【解决方案1】:

这是指针运算的工作方式。

形式的表达

pointer + amount

至少非正式地说,被评估为

pointer + sizeof(*pointer) * amount

换句话说,指针运算增加了类型的sizeof 个单位。

在您的第一个 sn-p 中,sizeof(arr) 是实际数组的大小。但是在函数中,由于指针衰减,它是指向数组中元素的指针的大小!

自己看看 - 在两种情况下都输出sizeof(arr),并注意区别。

(添加到令人眼花缭乱的规则列表中,sizeof(arr) 的评估是 arr 确实衰减为指针类型的实例之一!哦,天哪!)

【讨论】:

    【解决方案2】:
    int sizeArr(int arr[])
    {
        int size = *(&arr + 1) - arr;
        return size;
    }
    

    sizeArr 函数中的arr 参数不包含大小信息(与通过引用函数传递数组相比),传递给它的参数将_衰减为指针)。因此,您尝试计算的大小会根据指针而不是数组类型的对象进行一些(错误)计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-02
      • 2015-10-17
      • 2020-04-11
      • 2021-04-13
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多