- 论坛徽章:
- 0
|
#include <iostream>
#include <cstdlib>
using namespace std;
int *g_nPointer;
int g_nValue;
int *ptr;
int *TAB()
{
int ret;
return (&ret);
}
void Victom()
{
ptr = TAB();
*ptr = 42;
g_nPointer = ptr;//这里我让它们指向同个内容
g_nValue = (int)&ptr;
cout << "*ptr = " << *ptr << endl;
cout << "ptr = " << ptr << endl << "&ptr = " << &ptr << endl;
cout << "*ptr = " << *ptr << endl;
}
int main(void)
{
Victom();
cout << "*g_nPointer = " << *g_nPointer << endl;
cout << "*g_nPointer = " << *g_nPointer << endl;
cout << "g_nValue = " << g_nValue << endl;
g_nPointer = (int *)g_nValue;
cout << "g_nPointer = " << g_nPointer << endl;
cout << "*g_nPointer = " << *g_nPointer << endl;
printf("g_nValue = 0x%x\n", g_nValue);
int *pTest;
int x = 5;
pTest = &x;
cout << "pTest = " << pTest <<" *pTest = " << *pTest << endl;
cout << "pTest = " << pTest <<" *pTest = " << *pTest << endl;
system("pause");
return 0;
}
操作系统为:WIN2003企业版 Intel P4 2.0G
[dev-cpp结果]
*ptr = 0//????????? 这里与VC的不同,为什么这里变成“0”?似乎应该是“42”
ptr = 0x22ff34
&ptr = 0x443018
*ptr = 0//?????????这里的值和上面的值相等,都为“0”,而VC中这里就发生了变化
*g_nPointer = 0//?????????为什么连续打印的两个值会不同
*g_nPointer = 10//?????????
g_nValue = 4468760
g_nPointer = 0x443018
*g_nPointer = 2293556
g_nValue = 0x443018
pTest = 0x22ff70 *pTest = 5
pTest = 0x22ff70 *pTest = 5
请按任意键继续. . .
[Visual Studio 2005 /Visual Studio 6.0 结果]
*ptr = 42//?????????
ptr = 0012FD9C
&ptr = 004184DC
*ptr = 274148040//?????????为什么这里的值会变呢?中间没有对它的内容作任何改变。
*g_nPointer = 274148040//?????????
*g_nPointer = 1244584//?????????
g_nValue = 4293852
g_nPointer = 004184DC
*g_nPointer = 1244572
g_nValue = 0x4184dc
pTest = 0012FF54 *pTest = 5
pTest = 0012FF54 *pTest = 5
请按任意键继续. . .
难道这也和++,--的多重操作一样不可预测性?
以前书上没有看到过或者看的时候不够仔细,没有印象,不知道为何原因?
今天看一片文章的时候,做实验才发现。
小弟不懂,希望能得到 CUers 们的指点!非常谢谢!
P.S 如果有人曾经问过这样的问题,版主请删除我的帖并把它的链接告诉我。
[ 本帖最后由 matthew6868 于 2006-1-24 14:59 编辑 ] |
|