程序一:
#include "stdafx.h"
#include <iostream>using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a=200,b=400;
int *p1=&a, *p2=&b;
p1=p2;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"*p1="<<*p1<<endl; //p1所指地址上的值
cout<<"*p2="<<*p2<<endl; //p2所指地址上的值
cout<<"p1="<< p1<<endl; // p1所指地址
cout<<"p2="<< p2<<endl; //p2所指地址
return 0;
}
个人理解:&为取地址符号,*为取值符号, int *p=&a 分两步运算,首先p=&a,代表p取a得地址,再计算*p,*p取地址 上的值
程序一中,p2赋给p1,即p1与p2是相同的地址,*p1改为指向b的地址 所以输出结果为:
程序2:
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a=200,b=400;
int *p1=&a, *p2=&b;
*p1=*p2;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"*p1="<<*p1<<endl; //p1所指地址上的值
cout<<"*p2="<<*p2<<endl; //p2所指地址上的值
cout<<"p1="<< p1<<endl; // p1所指地址
cout<<"p2="<< p2<<endl; //p2所指地址
return 0;
}
程序二中,*p1,*p2代表地址上的值,*p2赋给*p1代表*p1的值发生了变化,但所指的地址没有改变,*p1还是指向a,所以二者的值会同时改变,程序输出结果为: