指针与数组有何不同?

时间:2014-03-25 23:02:27

标签: c++ data-structures

有人可以向我解释两者之间的区别吗?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

指针是存储器中存储地址的位置。数组是内存中具有一定数量的相同类型对象的位置。

创建数组为对象分配空间。创建指针会将地址空间分配给要存储的其他内容(或者可能是其自己的地址)。

答案 1 :(得分:-1)

int foo[5];

houses

当数组未用作值时,其名称表示整个数组,因此foo表示整个数组。这个数组在堆栈内存中分配,你也可以使用指针和动态内存。

警告

int *foo;  // in here this pointers points to nothing
// you can go ahead an use the pointer and see an amazing crash
// or point it to something.
foo = new int[5];

这是有问题的,因为你有在内存中分配的元素,而你需要跟踪你正在分配的内存。

相反,你可以声明一个指向5个元素数组的指针。

int (*foo)[5];
foo = new int[5];

houses

如您所见,两者都是指针,都是数组。但你可以这样做:

int p = 5;
int *foo = &p;

这种方式foo指向p的地址,即5,这样,您可以指向其他对象。

因此pointer并不一定指向array

C++11提供了使用std实现指针的绝佳方法,这些是arrayvectorlist等容器,shared_ptr 1}},unique_ptr

这样你就可以让类型处理分配的内存和内存大小。