main() {
int a,b;
int point_1,point_2;
scanf("%d%d",&a,&b);
point_1 = &a;
point_2 = &b;
printf("%d,%d\n",a,b);
compositor(point_1,point_2);
printf("%d,%d",a,b);
}
compositor(int *p1,int *p2) {
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
以上程序可以交换point_1,point_2所指的东西,为什么不把compositor改成
compositor(int *p1,int *p2) {
int temp;
temp = p1;
p1 = p2;
p2 = temp;
}
就不行呢?其实也是交换了point_1,point_2的地址啊!
----------------解决方案--------------------------------------------------------
地址是不可以赋值给变量的
----------------解决方案--------------------------------------------------------
形参不能改变实参的地址
----------------解决方案--------------------------------------------------------
地址与变量之间不能相互赋值了,必须是同一类型才可以相互赋值的。
----------------解决方案--------------------------------------------------------
定义这个函数时:compositor(int *p1,int *p2) 同时也定义了参数类型:p1,p2是指针。
所以以后运用p1,p2都是指指针,就不用再加*这个符号了
要是加了*这个符号,就代表是一个指针上的值,即:*P1,*p2是指针上的值。
{
int temp;
temp = p1; (p1应用时是个指针,而temp是个值,二者不可以相等,而*p1在
应用时指的是指针上的值,不再是指针了)
p1 = p2;
p2 = temp;
}
----------------解决方案--------------------------------------------------------
你定义的时候就打错了 应该是:
main() {
int a,b;
int *point_1,*point_2;
这样就把POINT 1和2 定义为指针变量。
这样两个point_1,point_2就可以存放变量在内存里的地址了
其实你的问题在C语言书上就指出来了
你如果子程序里指针变量不加*号的话 其实就是两个变量互换“地址的值”而且 而没有换地址指向的内容
----------------解决方案--------------------------------------------------------
如过temp是个地址,结果有会如何????
----------------解决方案--------------------------------------------------------
也没怎么样 还是交换不了
原来带*的子程序的含义: 把两个各自指向两个变量的地址变量互换 其实就是把他们的地址对应的内容互换
没有带*的:把两个地址变量的“地址值”交换一下 没有启到指向的内容互换的作用
----------------解决方案--------------------------------------------------------
#include <stdio.h>
main() {
int a,b;
int *point_1,*point_2;
scanf("%d%d",&a,&b);
point_1 = &a;
point_2 = &b;
printf("%d,%d\n",a,b);
compositor(*point_1,*point_2);
printf("%d,%d",a,b);
}
compositor(int *p1,int *p2) {
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
以上程序可以交换point_1,point_2所指的东西,为什么不把compositor改成
compositor(int *p1,int *p2) {
int temp;
temp = p1;
p1 = p2;
p2 = temp;
}显然,P1,P2是指针变量,里面存的是地址,而temp是整形变量,把地址赋给整型变量,肯定不行喽!
----------------解决方案--------------------------------------------------------
同意啊
这上对的
----------------解决方案--------------------------------------------------------