【问题标题】:Differences in behavior of dynamically created arrays and regular arrays (C++)动态创建的数组和常规数组的行为差异 (C++)
【发布时间】:2022-12-13 12:08:57
【问题描述】:

我试图查看动态创建的数组是否具有与普通数组相同的行为,但看起来它们确实有点不同。 这是我用来测试他们行为的代码:

int main(){
    int *int_array{new int[10]};
    cout<<sizeof(*int_array);
    return 0;
}

显示到控制台的输出是:4

但是对于一个普通的整数数组,在使用大小函数,我得到数组占用的总大小(以字节为单位)。如下代码所示:

int main(){
    int int_array[5];
    cout<<sizeof(int_array);
    return 0;
}

显示到控制台的输出是:20

所以看起来当我取消引用指向动态分配数组的指针时,至少对于“sizeof”函数,我只能“看到”数组的第一个元素,而不是一眼就能看到整个数组。

这个对吗?你能解释一下这里发生了什么吗??

我希望看到所有类型数组的统一、一致的行为,无论它们是如何创建和存储在内存中的。 我试过谷歌搜索以查看 Dyn 之间的差异。分配数组和普通数组,但它们没有产生任何解释。

【问题讨论】:

  • int *int_array{new int[10]}; int_array 不是一个数组,它是一个指向 int 的指针。它用于指向未命名的动态分配数组的第一个元素,当结合该数组中元素数量的知识时,它允许访问和使用该未命名数组。

标签: c++ arrays dynamic-memory-allocation sizeof


【解决方案1】:

出于纯粹的本能,静态数组 (20) 的大小很方便地是 5 的倍数——初始化数组时声明的记录,以及 4——第一个 main() 函数中 *int_array 的大小.

静态数组 sizeof 给出静态声明数组的总大小。 int_array 内容的大小是它指向的内容的大小,即数组的头部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多