能力值:
( LV9,RANK:150 )
|
-
-
2 楼
如楼主所说,是申请内在空间,大小是Size * sizeof(int)
前面的(int*)可以没有,不可能有些编译器需要强制吧!我去掉后依然OK
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
重复 发贴
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
(int*) 强制转换
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
第一个是一指针
第二个是强制类型转换,转换为指向整形的地址
|
能力值:
( 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的返回指针初始化为相应的类型
这些只是我片面的理解,可能会和实际有很多出入,还望各位大侠多多指导,呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
int* m_pData = new int[Size * sizeof(int)];
这么写不就可以了吗?不需要强制转换的~
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
l楼主 我也有一个C++程序的注册功能在破解中 想和你探讨下?
如果愿意帮助我的留个Q好么?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
其实上面已经定义了m_pData是一个整型指针,下面那句可以不要的,就是一个提示类型的
|
|
|