c++ - 动态数组和指针表示法
问题描述
指针是变量还是地址?
因为int** array= new int*[4]
太混乱了。
因为int** array
在这段代码中,指针变成了存储指针地址的变量,并且new int*[4]
变成了将存储在另一个指针中的地址。
我理解错了什么?
解决方案
指针是一种数据类型,类似于int
or char
。这里的数据是一个内存地址。指针使用预期位于内存中所指地址处的值类型来限定。与其他数据类型一样,指针可以用作变量、函数参数、数组元素等的类型。
因此,int **array
是一个类型变量,表示指向位于内存某处int **
的类型值的指针。int *
反过来,int *
意味着指向int
位于内存某处的类型值的指针。或者,简而言之,int **
是一个指向int
.
表达式new int*[4]
意味着在内存中分配一个类型的对象int *[4]
并返回一个指向它的指针。Typeint *[4]
表示由四个类型元素组成的数组,int *
其中int *
,我们已经知道,表示指向int
值的点。
所以,在初始化时,左边(int **
)和右边(int *[]
)的类型是不同的。但是,如果数组元素的类型与指针引用的值的类型相同,C++ 能够自动将数组转换为指针。在我们的例子中,数组元素类型int *
与指针所指的类型相同。当数组转换为指针时,生成的指针将引用数组的第一个元素。
推荐阅读
- python - Python unicode 错误读取其他应用程序生成的文件
- windows - 快捷方式属性表如何立即更改图标?
- c - 无论值来自变量还是固定数字,幂函数的输出都不同
- r - 在 R 中,将日期从 2020 年 8 月 7 日修改为 2020 年 8 月 7 日,以及如何删除时区
- python - 从列表中提取嵌套元组(Python)
- python - Discord py JSON文件添加额外的括号
- sql - 如何防止在 Sequelize Node.js 中插入冗余组合?
- javascript - 如何在服务人员中播放通知声音?
- reactjs - 如何仅使用 React 中的函数组件获取输入的文本值?
- firebase - Flutter-Firebase RTDB:从 Firebase 实时数据库读取数据是否必须使用 Push ID?