第二个简单的问题:
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中方法可以达到你想要的效果,一种是引用,一种是指针,这两种都是对地址进行操作,具体的你找找书,书上说的很清楚