动态数组和指针表示法



指针是变量还是地址?

因为int** array= new int*[4]太混乱了。

对于此代码中的int** array,指针成为存储指针地址的变量,new int*[4]成为将存储在另一个指针中的地址。

我理解错了什么?

指针是一种数据类型,类似于intchar。 此处的数据是内存地址。 指针使用预期位于内存中引用地址的值类型进行限定。 与其他数据类型一样,指针可以用作变量、函数参数、数组元素等的类型。

因此,int **arrayint **类型的变量,这意味着指向位于内存中某处的int *类型的值的指针。 反过来,int *表示指向位于内存中某处的int类型的值的指针。 或者,简而言之,int **是指向int的指针。

表达式new int*[4]表示在内存中分配一个int *[4]类型的对象并返回指向它的指针。 类型int *[4]表示由int *型的四个元素组成的数组,其中int *,正如我们已经知道的,表示一个点到int值。

因此,在初始化中,左部分(int **)和右部分(int *[])的类型是不同的。 但是,如果数组元素的类型与指针引用的值的类型相同,C++能够自动将数组转换为指针。 在我们的例子中,数组元素类型是int *,指针引用的类型也是如此。 当数组转换为指针时,生成的指针将引用数组的第一个元素。

在此声明中

int** array= new int*[4];

array是一个变量,由元素类型为int *的动态分配数组的第一个元素的地址初始化。

如果你有一个声明如下的数组

T array[N];

其中T是某种类型,则可以声明指向数组第一个元素的指针,例如

T *p = array;

如果考虑到您的数组,那么只需T等于int *

简单地说,指针是一个变量,可以存储另一个变量的地址,而不是一个int或一个float或其他一些值,如"普通">变量。

像任何其他变量一样,指针本身也有一个地址,因此你可以有一个指向指针的指针,存储另一个指针地址的指针。