|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
想问一下这个不用指针应该也能实现吧:
这是小甲鱼源代码:
#include <stdio.h>
void main()
{
void exchange(int *q1, int *q2, int *q3);
int a, b, c, *p1, *p2, *p3;
scanf("%d %d %d", &a, &b, &c);
p1 = &a;
p2 = &b;
p3 = &c;
exchange(p1, p2, p3); //确保a > b > c
printf("%d %d %d\n", a, b, c);
}
void exchange(int *q1, int *q2, int *q3) //int *q1 = p1;
{
void swap(int *pt1, int *pt2); //用于交换&……&%
if( *q1 < *q2 )
{
swap(q1, q2);
}
if( *q1 < *q3 )
{
swap(q1, q3);
}
if( *q2 < *q3 )
{
swap(q2, q3);
}
}
void swap(int *pt1, int *pt2)
{
int temp;
temp = *pt1;
*pt1 = *pt2;
*pt2 = temp;
}
这是我编写的不用指针的代码:
#include <stdio.h>
#include <conio.h>
void main()
{
void exchange(int x, int y, int z);
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
exchange(a,b,c);
printf("%d\n%d\n%d\n",a,b,c);
getch();
}
void exchange(int x, int y, int z)
{
void swap(int a, int b);
if (x<y)
{
swap(x,y);
}
if(x<z)
{
swap(x,z);
}
if(y<z)
{
swap(y,z);
}
}
void swap(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
但是这个它不工作,输入什么样的顺序就照样输出,没有进行大小比较。希望指出错误的地方和修改建议,谢谢。
本帖最后由 micolar 于 2019-8-5 15:58 编辑
int a = 1,b = 2;
void swap(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
swap(a,b);
没有交换是swap函数里面的a,b 跟swap函数外的a,b是不一样的
你也可以理解为
swap(a,b) == swap(1,2) != swap(a,b);
当执行swap函数时编译器分配另外两个变量a,b 然后把swap函数传入进来的值付给这两个变量 swap函数结束后这两个a,b清零 换言之你可以把它当成swap(数值,数值)而不是swap(变量名,变量名)
你用指针的话
void swap(int* a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
这个你也可以把它当为swap(数值,数值)
只要知道变量a的地址 就能访问a 也就可以在swap访问到它
用指针和不用指针的区别是
指针可以随意访问你想访问的变量的值 只要你知道它地址
举个例子
const int a = 4;
我们知道再次调用a = 5编译器是不给通过的
但是我们可以获取它的指针饶过它
*&a = 5;
|
|