C++ 指针与数组有何不同?

C++ 指针与数组有何不同?,c++,data-structures,C++,Data Structures,有人能给我解释一下这两者的区别吗?非常感谢您的帮助。 int foo[5]; 当数组不用作值时,其名称表示整个数组,因此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 somethi

有人能给我解释一下这两者的区别吗?非常感谢您的帮助。

int foo[5];

当数组不用作值时,其名称表示整个数组,因此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];

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

int p = 5;
int *foo = &p;
通过这种方式
foo
指向p的地址,即5,通过这种方式,您可以指向其他对象

因此
指针
不一定指向
数组

C++11
提供了使用
std
实现指针的好方法,这些容器包括
array
vector
list
,以及
shared_ptr
unique_ptr

通过这种方式,您可以让类型处理分配的内存和内存大小。指针是内存中存储有地址的位置。数组是内存中的一个位置,在一行中有一定数量的相同类型的对象


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

Close。指针包含一个地址。指针指向某物。数组是某物的容器。指针不需要实际指向某物。C/C++指针是不安全的,只能被赋予随机的int值或未初始化。对于不构造自身类型的C数组或C++数组,同样适用。除了垃圾内存之外,您无法保证数组实际上包含任何内容。空间被分配,然后你必须自己处理它,除非它是一个带有构造函数的C++对象数组。我做了同样的事情,但是用盒子,你认为现在更清楚了吗?在第一个例子中,<代码> Foo< /Cord>是一个数组,而不是指针。研究“指针分解数组”。在第二个示例中,您应该使用类型“指向5个整数数组的指针”,而不是指向一个整数的指针。指向5个整数数组的指针int(*ptr)[5]的语法;这类似于2d数组,例如,ptr[1][2]是第二个数组中的第三个元素。我不认为这是OP想要的。编辑,为了你所有的观点,以防这个问题被删除。