社区
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];吗???
...全文
638
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
作业
写回复
配置赞助广告
用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)
int
*p1 =
new
int
[10];
int
*p2 =
new
int
[10]();
区别
下面描述正确的是
int
*p1 =
new
int
[10];
int
*p2 =
new
int
[10](); p1和p2申请的空间里面的值都是随机值 p1和p2申请的空间里的值都已经初始化 p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化(对) p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值 解释 在C++primer(第5版)中关于
new
的讨论有: 1、
new
...
int
* p =
new
int
[5];
int
*p =
new
int
[5]();delete[] p; delete p;
区别
是什么?
int
* p =
new
int
[5];
int
*p =
new
int
[5]();delete[] p; delete p;
区别
是什么?
c++学习之
new
int
()和
new
int
[]的
区别
new
int
[] 是创建一个
int
型数组,数组大小是在[]中指定,例如:
int
* p =
new
int
[3]; //申请一个动态整型数组,数组的长度为[]中的值
new
int
()是创建一个
int
型数,并且用()括号中的数据进行初始化,例如:
int
*p =
new
int
(10); // p指向一个值为10的
int
数。 ...
彻底理解c语言中
int
(*p)[3]和
int
*p[3]的意思
int
*p[3]是指针数组,这个数组有3个元素,每个元素都是指针。
int
(*p)[3]是指向一维数组的指针变量,就是这个指针指向了一个一维的数组。
int
(*p)[3] 数组指针,p是一个指针,指向1个有3个变量的数组
int
*p[3]指针数组,p是一个有3个元素的数组,每个元素的类型是整形指针
int
*p[3] 这种定义方式是我们非常熟悉的一种。 可以看出,定义数组的 []...
int
*a=
new
int
[124]初始化问题
http://blog.csdn.net/qiuchangyong/article/details/18410733 http://zhidao.baidu.com/link?url=sbrVKtqfMQfLOJD-OGLOQALwgQEDopyeyugzYwuX-4Pgx_SiTDI1LGxN6O4S1fxFHnMEeenOD4bCIyp1qkfvaq 1、
int
*a=
new
in
C++ 语言
65,199
社区成员
250,520
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章