社区
C++ 语言
帖子详情
new int*[2]和new (int *)[2] 的区别???
GoForSky
2009-03-09 10:23:54
一个2级指针的动态分配
int **p;
p=new int*[2];
这里p=new int*[2]等价p=new(int *)[2]吗???
我觉得应该等价
double *p;
p=new double [2];
把double换成 int *;
不就是:
int **p
p=new (int *)[2];吗???
...全文
598
24
打赏
收藏
new int*[2]和new (int *)[2] 的区别???
一个2级指针的动态分配 int **p; p=new int*[2]; 这里p=new int*[2]等价p=new(int *)[2]吗??? 我觉得应该等价 double *p; p=new double [2]; 把double换成 int *; 不就是: int **p p=new (int *)[2];吗???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
GoForSky
2009-03-11
打赏
举报
回复
int **p2Ary = new int*[n]; //-----> 改为 int **p2Ary = new (int*)[n];--编译通不过(VC6+BC6) why?????
for(int i = 0; i < n; i++)
{
p2Ary[i] = new int[m];
for(int j = 0; j < m; j++)
cin >> p2Ary[i][j];
}
for(int i = 0; i < n; i++)
delete []p2Ary[i];
delete []p2Ary;
shy_xiaoxiao
2009-03-11
打赏
举报
回复
忽略这个贴,发错地方了。。。。。。。。。
[Quote=引用 19 楼 shy_xiaoxiao 的回复:]
明白了,当T是int[5]的时候
new T 就等于 new int[5], 得到的肯定是一个int*
所以当T是一个数组类型的时候,new T似乎有些二义性
好像快要可以结贴了,呵呵
[/Quote]
shy_xiaoxiao
2009-03-11
打赏
举报
回复
明白了,当T是int[5]的时候
new T 就等于 new int[5], 得到的肯定是一个int*
所以当T是一个数组类型的时候,new T似乎有些二义性
好像快要可以结贴了,呵呵
chenzhp
2009-03-11
打赏
举报
回复
[Quote=引用 15 楼 shy_xiaoxiao 的回复:]
p=new int*[2] 和 p=new(int *)[2] 不是等价的
前者p是一个数组,该数组的元素类型是int*,数组大小是2,++p将前进sizeof(int*)也就是4个字节
后者p是一个指针,该指针指向一个大小为2的int数组,++p将前进sizeof(int[2])也就是8个字节
因为数组也可以理解为指针,所以两者都表示一个地址,但类型不不一样
[/Quote]
shy_xiaoxiao
2009-03-11
打赏
举报
回复
说前者p是个数组好像也不太严谨,严格来说这里p是个指针,指向一个数组的首地址,呵呵
[Quote=引用 15 楼 shy_xiaoxiao 的回复:]
p=new int*[2] 和 p=new(int *)[2] 不是等价的
前者p是一个数组,该数组的元素类型是int*,数组大小是2,++p将前进sizeof(int*)也就是4个字节
后者p是一个指针,该指针指向一个大小为2的int数组,++p将前进sizeof(int[2])也就是8个字节
因为数组也可以理解为指针,所以两者都表示一个地址,但类型不不一样
[/Quote]
amossavez
2009-03-11
打赏
举报
回复
同意楼上的说话
shy_xiaoxiao
2009-03-11
打赏
举报
回复
p=new int*[2] 和 p=new(int *)[2] 不是等价的
前者p是一个数组,该数组的元素类型是int*,数组大小是2,++p将前进sizeof(int*)也就是4个字节
后者p是一个指针,该指针指向一个大小为2的int数组,++p将前进sizeof(int[2])也就是8个字节
因为数组也可以理解为指针,所以两者都表示一个地址,但类型不不一样
elpep
2009-03-11
打赏
举报
回复
再
new (int *)[2];这句在VC中,编译错误.
(int *)强制类型转换,无法确定分配的类型和尺寸
elpep
2009-03-11
打赏
举报
回复
[Quote=引用 15 楼 shy_xiaoxiao 的回复:]
p=new int*[2] 和 p=new(int *)[2] 不是等价的
前者p是一个数组,该数组的元素类型是int*,数组大小是2,++p将前进sizeof(int*)也就是4个字节
后者p是一个指针,该指针指向一个大小为2的int数组,++p将前进sizeof(int[2])也就是8个字节
因为数组也可以理解为指针,所以两者都表示一个地址,但类型不不一样
[/Quote]
按你说:
p=new (int *)[2]
后者p是一个指针,该指针指向一个大小为2的int数组,++p将前进sizeof(int[2])也就是8个字节.
则下2个程序编译错误:
int (*p)[2];
p=new (int *)[2];
int (**p)[2];
p=new (int *)[2];
(int *)是强制转换:
比如:
1:
void main()
{
int *p;
}
可以
2:
typedef int* TYPE;
void main()
{
TYPE p;
}
//ok
3:
typedef (int *)TYPE//error
强制转换不是类型
elpep
2009-03-11
打赏
举报
回复
int(*p) 把p指针指向的数据强制转化成int型。
int *p 就试指针p的定义,定义了一个指向int型数据的指针。
(int *)p 是强制把p(不管原来是什么类型的)转化成指向整形数据的指针。
int *p[25];是定义了一个数组,数组名是p,这个数组是由25个指向int型数据的指针组成的。
int (*p)[25];是定义了一个指针p,它指向的是一个25个int型大小的数组。在这里p+1其实是走了25*sizeof(int)个字节。
(int *)[2]的(int *)就是强制转换指针的意思。
GoForSky
2009-03-11
打赏
举报
回复
[Quote=引用 17 楼 shy_xiaoxiao 的回复:]
说前者p是个数组好像也不太严谨,严格来说这里p是个指针,指向一个数组的首地址,呵呵
引用 15 楼 shy_xiaoxiao 的回复:
p=new int*[2] 和 p=new(int *)[2] 不是等价的
前者p是一个数组,该数组的元素类型是int*,数组大小是2,++p将前进sizeof(int*)也就是4个字节
后者p是一个指针,该指针指向一个大小为2的int数组,++p将前进sizeof(int[2])也就是8个字节
因为数组也可以理解为指针,所以两者都表示一个地址,但…
[/Quote]
后者p是一个指针,该指针指向一个大小为2的int数组,++p将前进sizeof(int[2])也就是8个字节 :
为什么这么理解呢???
new一般就是new 类型[个数];这里类型为(int *),个数2.结果new (int *)[2];应该就是分配了两个空间,类型是int *;
为什么不对呢????
new (int *)[2],怎么理解,才能像你说的那样呢
jakqigle
2009-03-10
打赏
举报
回复
等价的。
二维数组动态申请与内存释放:
int **p2Ary = new int*[n];
for(int i = 0; i < n; i++)
{
p2Ary[i] = new int[m];
for(int j = 0; j < m; j++)
cin >> p2Ary[i][j];
}
for(int i = 0; i < n; i++)
delete []p2Ary[i];
delete []p2Ary;
jojotom
2009-03-09
打赏
举报
回复
等价的了,加了括号更好些吧
pengzhixi
2009-03-09
打赏
举报
回复
等价
hongpan00
2009-03-09
打赏
举报
回复
嗯,相当于new一个指针数组的元素给这个二级指针
mabo321
2009-03-09
打赏
举报
回复
一样
sherrik
2009-03-09
打赏
举报
回复
up~
lingyin55
2009-03-09
打赏
举报
回复
[Quote=引用 5 楼 lingyin55 的回复:]
不能这样理解,应该从运算符的优先级和结合性去看。
[/Quote]
嗯,是等价的,我错了。看到的时候我觉得应该是从运算符的结合性和优先级去考虑,但是这里的p=new int*[2]等价p=new(int *)[2]是等价的,相当于
声明一个2个元素的数组,数组每个元素都是一个int *指针,因此每个元素还可以单独的申请空间。
ps:这次应该不会错了吧?各位指正啊。
mengde007
2009-03-09
打赏
举报
回复
楼上你认为应该怎样理解!
lingyin55
2009-03-09
打赏
举报
回复
不能这样理解,应该从运算符的优先级和结合性去看。
加载更多回复(4)
node-v16.12.0-darwin-x64.tar.xz
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
试用Dev Containers的示例项目-Go
计算机技术是指评价计算机系统的各种知识和技能的总称。它涵盖了计算机硬件、软件、网络和信息安全等方面。计算机技术的发展使我们能够进行高效的数据处理、信息存储和传输。现代计算机技术包括操作系统、数据库管理、编程语言、算法设计等。同时,人工智能、云计算和大数据等新兴技术也在不断推动计算机技术的进步。计算机技术的应用广泛,涵盖了各个领域,如商业、医疗、教育和娱乐等。随着计算机技术的不断革新,我们可以更加高效地实现预期自动化、标准化
NTsky新闻发布v1.0测试版(提供JavaBean).zip
### 内容概要: 《NTsky新闻发布v1.0测试版》是一款基于 Java 开发的新闻发布系统的测试版本,旨在为新闻机构和媒体提供一个简单易用的新闻发布平台。该系统具有基本的新闻发布和管理功能,包括新闻分类、新闻编辑、新闻发布等核心功能。此外,该版本还提供了 JavaBean,使开发人员能够方便地将系统集成到自己的项目中,快速实现新闻发布的功能。 ### 适用人群: 本测试版本适用于新闻机构、媒体从业者以及Java开发人员。如果你是一家新闻机构或媒体,希望拥有一个简单易用的新闻发布平台,方便快捷地发布和管理新闻,那么这个测试版本将为你提供一个初步的体验。同时,如果你是一名Java开发人员,希望学习和掌握新闻发布系统的开发技术,并且对新闻行业有一定的了解,那么通过这个测试版本,你可以获取到一些JavaBean,并且可以参考系统的设计和实现,为你的项目开发提供参考和借鉴。无论是从业务需求还是技术学习的角度,该测试版本都将为你提供一定的帮助和支持。
JavaScript介绍.zip
javascript,JavaScript 最初由 Netscape 公司的 Brendan Eich 在 1995 年开发,用于 Netscape Navigator 浏览器。随着时间的推移,JavaScript 成为了网页开发中不可或缺的一部分,并且其应用范围已经远远超出了浏览器,成为了全栈开发的重要工具。
15-21.php
15-21.php
C++ 语言
64,646
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章