代码出现未知错误
想问一下这个不用指针应该也能实现吧:这是小甲鱼源代码:
#include <stdio.h>
void main()
{
voidexchange(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);
}
voidexchange(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);
}
}
voidswap(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;
}
但是这个它不工作,输入什么样的顺序就照样输出,没有进行大小比较。希望指出错误的地方和修改建议,谢谢。 交换函数必用指针 本帖最后由 jackz007 于 2019-8-5 15:41 编辑
1、一般情况下,函数的参数是单向只读的,也就是说,在函数中对参数进行修改,其影响仅限于函数内部,不会被带到函数以外;如果需要双向读写,就需要传址,这样,在函数中对参数内容的修改就会被带到函数以外;
2、同一个源程序文件中的各个函数只要在使用前定义,就可以不用提前声明。#include <stdio.h>
void swap(int * a , int * b)
{
int temp ;
temp = * a ;
* a = * b;
* b = temp ;
}
void exchange(int * x , int * y , int * z)
{
if (* x < * y) swap(x , y) ;
if (* x < * z) swap(x , z) ;
if (* y < * z) swap(y , z) ;
}
int main(void)
{
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) ;
fflush(stdin) ;
getchar() ;
}
本帖最后由 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;
感谢大家的回答,还有几个小概念没有搞太清楚:
不用指针的话就无法通过函数来改变变量的值吗?运用指针有没有限制,是不是只要写上*指针变量就可以在任何地方改变变量的值? 应该吧
不过要注意使用
特别是未初始化也就是没给它赋值最好不要对它所指向的值操作
明白了,谢谢{:5_109:}
页:
[1]