读书人

第二个简单的有关问题

发布时间: 2012-02-10 21:27:42 作者: rapoo

第二个简单的问题:
int a=5, b=10;
int *p1, *p2, *temp;
p1=&a;
p2=&b;

temp=p1; /* p1存储的地址赋给temp后,

p1是不是还保留着原来的值? */

p1=p2; /* p2存储的值是不是覆盖了p1的值? */

p2=temp;
............................
*temp=*p1; /* 这样赋值
*p1=*p2;
*p2=*temp; 可以吗? */
...........................
int a=5, b=10, c;
c=a;
a=b;
b=c;
这样呢,为什么不可以?

[解决办法]
简单?

指针是一个int变量,但作用是用来存放地址的。
* 运算符可以提取存放的地址所代表的对象。

int i = 2;
int *p = &i; // & 运算符表示取地址。
p == i的地址
*p == i 本身

int n = 3;
p = &n; //改变p保存的值,但是p所指对象保持不变
*p = 4; //改变p所指向对象的值, 但p自身不改变。



[解决办法]
int a=5, b=10, c;
c=a;
a=b;
b=c;


这个当然可以,你所说的不可以应该是在a,b作为函数的形参时候不行
例如:

fun(int a, int b)
{
int c;
c = a;
a = b;
b = c;
}

然后主函数调用fun()自然得不到你想要得结果,原因就在于传参的形式上,2中方法可以达到你想要的效果,一种是引用,一种是指针,这两种都是对地址进行操作,具体的你找找书,书上说的很清楚

读书人网 >C++

热点推荐