请问这个表达式是什么意思

zh_huo 2011-06-12 11:40:16
Matrix = (int **)new int *[vexNum];// 生成邻接矩阵



请问各位高手这个表达式是什么意思??尤其是new前面的(int **)这是什么意思,为什么能这样写????
貌似在各类的c++书籍上都没有介绍这样的用法。

ps:这句表达式我是在《数据结构与算法c++版》清华大学出版社出版上见到的,是在配套的软件包里
...全文
98 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zh_huo 2011-06-13
  • 打赏
  • 举报
回复
但是不对啊,后面不是的类型不就是int类型吗??如果识强制转换的话,这不是做无用功吗。如果是强制转换matrix,那么这语法不是错误了吗??
方寸之间 2011-06-13
  • 打赏
  • 举报
回复
Matrix = (int **)new int *[vexNum];// 生成邻接矩阵
定义动态二维数组的方法
Matrix是指向该数组的首元素。
可以这样理解
typedef int *PInt;
Matrix = (PInt*)new PInt[vexNum];// 定义一个一维指针数组。每个元素为一个指向int类型的指针。
阿白hhh 2011-06-13
  • 打赏
  • 举报
回复
后面是指针,前面是指向指针的指针
caihongjftt 2011-06-13
  • 打赏
  • 举报
回复
new int *[vexNum]是定义一个指向二维数组的指针(执行二维数组的第一个元素的地址)
(int **) 是将指向二维数组的第一个元素地址的指针强制转换为二维数组的首地址。

我也是新手,上述只是猜测。(思考下,二维数组a[][],其&a[]和&a的含义,可能会有些结论)
zh_huo 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hedy007 的回复:]

C/C++是静态类型语言,
变量在使用前是必须声明或定义的。
[/Quote]

对。但是前面申明了,但是为什么还要加(int **)??
莫非是为了再次强调matrix是一个二维数组,提高程序的可读性,以及在释放内存的时候别把matrix误当做一个指针??
hedy007 2011-06-13
  • 打赏
  • 举报
回复
C/C++是静态类型语言,
变量在使用前是必须声明或定义的。
zh_huo 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wcyoot 的回复:]

Matrix = (int **)new int *[vexNum];// 生成邻接矩阵
定义动态二维数组的方法
Matrix是指向该数组的首元素。
可以这样理解
typedef int *PInt;
Matrix = (PInt*)new PInt[vexNum];// 定义一个一维指针数组。每个元素为一个指向int类型的指针。
[/Quote]


嗯嗯,我再看了一遍源代码,发现matrix在前面是没有任何申明或者是定义的,matrix是第一次出现。我现在明白了上面的代码应该等同于
int **matrix;
matrix=new int*[vexnum];
但是将这两个表达式合在一起表达还是第一次见,不太习惯,而且在c++的入门书籍上没有提到这样的写法/
sduxiaoxiang 2011-06-12
  • 打赏
  • 举报
回复
强制转了下类型

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧