有关c语言指针的地址传递问题
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/09/27 23:31:06
有关c语言指针的地址传递问题
如图,我用指针和函数编写的,为什么最后结果不会进行交换,比如我输入1 2 结果还是1 2 按道理说p本来指向a的地址,q指向b的地址,我用swap函数交换后应该是改变了指针的指向 即p指向b q指向a 当然a<b时就会运行swap函数,这样一来最后输出的结果是*p 和*q的址.按道理来说应该会进行交换的,
如图,我用指针和函数编写的,为什么最后结果不会进行交换,比如我输入1 2 结果还是1 2 按道理说p本来指向a的地址,q指向b的地址,我用swap函数交换后应该是改变了指针的指向 即p指向b q指向a 当然a<b时就会运行swap函数,这样一来最后输出的结果是*p 和*q的址.按道理来说应该会进行交换的,
这个方式是交换不了的.这样做也是值传递.
在传递参数时,在swap函数内,创建了两个新的指针变量p1,p2,它们的值分别于main函数中传入的参数一样(指向的内存空间一样)所以在swap只是交换的这两个新变量的值,而不会影响main函数中p,q的值
可以修改下swap:
void swap(int *p1, int *p2){
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
在传递参数时,在swap函数内,创建了两个新的指针变量p1,p2,它们的值分别于main函数中传入的参数一样(指向的内存空间一样)所以在swap只是交换的这两个新变量的值,而不会影响main函数中p,q的值
可以修改下swap:
void swap(int *p1, int *p2){
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}