首页 > 解决方案 > 动态数组和指针表示法

问题描述

指针是变量还是地址?

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

因为int** array在这段代码中,指针变成了存储指针地址的变量,并且new int*[4]变成了将存储在另一个指针中的地址。

我理解错了什么?

标签: c++pointersmultidimensional-arraydynamic

解决方案


指针是一种数据类型,类似于intor char。这里的数据是一个内存地址。指针使用预期位于内存中所指地址处的值类型来限定。与其他数据类型一样,指针可以用作变量、函数参数、数组元素等的类型。

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

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

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


推荐阅读