#include
int main()
{
void swap(int* p1, int* p2);
int a, b;
int* pointer_1, * pointer_2;
printf("please enter two numbers:\n");
scanf("%d%d", &a, &b);
pointer_1 = &a;
pointer_2 = &b;
if (a < b) {
swap(pointer_1, pointer_2);
}
printf("%d > %d\n", pointer_1, pointer_2);
return 0;
}
void swap(int p1, int p2)
{
int temp;
temp = *p1;
p1 = p2;
p2 = temp;
}
子函数换成这样为什么交换不了主函数的值啊?
void swap(int p1, int p2)
{
int p;
p = p1;
p1 = p2;
p2 = p;
}
运行完后指针p1和p2也都指向a, b地址了,但就是输出的时候出错
因为传递方式有三种 .
第一种 值传递
第二种 指针传递
第三种 引用传递
然而呢,他们三也是有区别的。
第二种第三种 形参的改变也会改变实参
第一种 形参的改变不会改变实参。
修改如下,供参考:
#include <stdio.h>
void swap(int** p1, int** p2); //修改
int main()
{
int a, b;
int* pointer_1, * pointer_2;
printf("please enter two numbers:\n");
scanf("%d%d", &a, &b);
pointer_1 = &a;
pointer_2 = &b;
if (a < b) {
swap(&pointer_1, &pointer_2); //修改
}
printf("%d > %d\n", *pointer_1, *pointer_2);
return 0;
}
void swap(int **p1, int **p2) //修改
{
int *p;
p = (*p1); //修改
(*p1) = (*p2);//修改
(*p2) = p; //修改
}