在64环境下编程遇到的一个有关问题
在64环境下编程遇到的一个问题,求助
在x64环境下为啥得不到预期的1 2 3 4 5输出呢?
求高手指点
------解决方案--------------------
今天看了一篇“HarbinZJU”的文章,终于明白了楼主的代码问题出在哪里;
int类型在x64和x86系统下的长度都是32位(4字节),但是pointer(指针)的长度在x86系统下是32位(4字节),在x64系统下是64位(8字节),问题出现在“int**pNum = (int**)num
”这一句代码,强制转换了从int到指针;
其实只需要将num的地址传递给*pNum就可以解决,改为“int**pNum = #
”
- C/C++ code
#include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int* num = new int[5]; num[0] = 1; num[1] = 2; num[2] = 3; num[3] = 4; num[4] = 5; int**pNum = (int**)num; int j =0; while( j< 5 ) { printf("%d\n",pNum[0]+j); j++; } return 0; }
在x64环境下为啥得不到预期的1 2 3 4 5输出呢?
求高手指点
------解决方案--------------------
今天看了一篇“HarbinZJU”的文章,终于明白了楼主的代码问题出在哪里;
int类型在x64和x86系统下的长度都是32位(4字节),但是pointer(指针)的长度在x86系统下是32位(4字节),在x64系统下是64位(8字节),问题出现在“int**pNum = (int**)num
”这一句代码,强制转换了从int到指针;
其实只需要将num的地址传递给*pNum就可以解决,改为“int**pNum = #
”