社区
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];吗???
...全文
634
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
*与(
int
*)的差别
int
**pa=
new
int
* [5];
int
*pb=
new
(
int
*)[5]; 上面两行代码的差别是什么? 分析与实验结果例如以下: (1)第一行代码能够在VS2010上正常执行,
new
出来的是一个存放
int
型指针变量的数组。能够存放5个这种...
#C++小trick# 指针数组与数组的指针:
int
*a[3];和
int
(*a)[3];的
区别
和
int
(*a)[3];的
区别
) 指针数组
int
*a[3];//a是个数组,这个数组包含3个元素,每个元素都是
int
*类型,也就是指向整型数据的指针类型。 如:
int
a=10,b=20,c=30;
int
*p[3]={&a,&b,&c};
int
(*a)[3];...
CPP-基础:
new
int
[]跟
int
()的
区别
1.
new
int
[] 是创建一个
int
型数组,数组大小是在[]中...2.
new
int
()是创建一个
int
型数,并且用()括号中的数据进行初始化,例如:
int
*p =
new
int
(10); // p指向一个值为10的
int
数。
int
a = 10,也叫静态创建,...
C++的
new
和delete
一、
new
和delete1、在C++中堆内存的分配和释放是通过
new
和delete 来操作的,他们和C语言的malloc和free有什么
区别
呢?
new
的底层也是通过malloc来开辟内存的,
new
比malloc 多一项功能,就是开辟完内存,还可以进行...
关于
int
*p[n]和
int
(*p)[n]的超详细讲解
int
*p(
int
),不就是个函数声明么
int
*是返回值类型,p是函数名,(
int
)是参数类型 p是函数,函数参数是一个
int
整型,返回值是指向一个整型的指针(
int
*) 设有语句
int
(*p)();则p是一个( ) A.指向一维整型数组...
C++ 语言
65,189
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章