首页
社区
课程
招聘
[旧帖] [求助]C++问题------结帖 0.00雪花
发表于: 2009-5-24 13:31 3457

[旧帖] [求助]C++问题------结帖 0.00雪花

2009-5-24 13:31
3457
int* m_pData;
m_pData=(int*) new int[Size * sizeof(int)];//size是一个参数
是什么意思呢?麻烦在解释一下
申请到内存空间后,前面的int*是什么意思呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 359
活跃值: (430)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
2
如楼主所说,是申请内在空间,大小是Size * sizeof(int)

前面的(int*)可以没有,不可能有些编译器需要强制吧!我去掉后依然OK
2009-5-24 13:45
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
重复  发贴
2009-5-24 13:45
0
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
(int*) 强制转换
2009-5-24 15:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第一个是一指针
第二个是强制类型转换,转换为指向整形的地址
2009-5-24 22:33
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
(int*)在此没有实际意义,它的本质意义是强制转换,但是你本来申请的就是int指针类型的,所以在此
可以省略。

//下边的反汇编码(int*)的和没有(int*)之间的比较,可见完全一样(当然变量及其地址除外)
3:        int Size=10;
0040D498   mov         dword ptr [ebp-4],0Ah
4:        int* m_pData;
5:        m_pData=(int*) new int[Size * sizeof(int)];
0040D49F   mov         eax,dword ptr [ebp-4]
0040D4A2   shl         eax,2
0040D4A5   shl         eax,2
0040D4A8   push        eax
0040D4A9   call        operator new (00401070)
0040D4AE   add         esp,4
0040D4B1   mov         dword ptr [ebp-10h],eax
0040D4B4   mov         ecx,dword ptr [ebp-10h]
0040D4B7   mov         dword ptr [ebp-8],ecx
6:        int* m_qData;
7:        m_qData=new int[Size * sizeof(int)];
0040D4BA   mov         edx,dword ptr [ebp-4]
0040D4BD   shl         edx,2
0040D4C0   shl         edx,2
0040D4C3   push        edx
0040D4C4   call        operator new (00401070)
0040D4C9   add         esp,4
0040D4CC   mov         dword ptr [ebp-14h],eax
0040D4CF   mov         eax,dword ptr [ebp-14h]
0040D4D2   mov         dword ptr [ebp-0Ch],eax
8:    }

//将动态分配的char类型内存空间强制转换为(int*),及其反汇编码
4:        int* m_pData;
5:        m_pData=(int*) new char[Size * sizeof(int)];
0040D49F   mov         eax,dword ptr [ebp-4]
0040D4A2   shl         eax,2
0040D4A5   push        eax
0040D4A6   call        operator new (00401070)
0040D4AB   add         esp,4
0040D4AE   mov         dword ptr [ebp-10h],eax
0040D4B1   mov         ecx,dword ptr [ebp-10h]
0040D4B4   mov         dword ptr [ebp-8],ecx

//new其实返回的是void*类型,后边的实际类型将其初始化为相应的类型
例如:int *p=new int[];后面的int[]将new的返回指针初始化为相应的类型

这些只是我片面的理解,可能会和实际有很多出入,还望各位大侠多多指导,呵呵
2009-5-25 15:54
0
雪    币: 132
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
int* m_pData =  new int[Size * sizeof(int)];

这么写不就可以了吗?不需要强制转换的~
2009-5-25 17:31
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
l楼主 我也有一个C++程序的注册功能在破解中 想和你探讨下?

如果愿意帮助我的留个Q好么?
2009-5-25 19:12
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
其实上面已经定义了m_pData是一个整型指针,下面那句可以不要的,就是一个提示类型的
2009-5-25 19:32
0
游客
登录 | 注册 方可回帖
返回
//