【发布时间】:2011-09-29 04:22:03
【问题描述】:
在 C++ 中声明数组(并为它们分配内存)的可能有多种方法中的 2 种
1. int a[3];
2. int *b = new int[3];
我想了解 c++ 如何区别对待这两者。
一个。在这两种情况下,我都可以使用以下语法访问数组:a[1] 和 b[1]
b.当我尝试cout<< a 和cout<< b 时,都打印各自数组的第一个元素的地址。
在我看来,a 和 b 都被视为指向数组第一个元素的指针。
c。但奇怪的是,当我尝试执行 cout << sizeof(a) 和 sizeof(b) 时,它们分别打印不同的值 - 4 和 12。
我不明白为什么在sizeof(b) 的情况下会打印整个数组的大小。
【问题讨论】:
-
静态分配 vs 动态分配,一个在栈上,一个在堆上
-
@Kshitij:这是自动分配,不是静态的。静态是加载时分配(用于全局对象)。
-
@Kerrek SB - 你能详细说明自动分配和静态分配之间的含义和区别吗?我尝试使用谷歌搜索,但没有发现任何好东西。
标签: c++ arrays pointers memory-management dynamic-memory-allocation