c语言问题

#include<stdio.h>
void f(int x,int y)
{ int t;
if(x<y) {t=x;x=y;y=t;}
}
void main()
{ int a=4,b=3,c=5;
f(a,b);f(a,c);f(b,c); //觉得应该是5,4,3啊,为什么结果是4,3,5
printf("%d,%d,%d",a,b,c);
}

这是一个初学都非常容易犯的错,你的交换函数实际上没有任何作用,它只是把a.b.c的值给x.y,然后x.y的值交换。从内存空间上更容易理解,a.b.c.x.y占用5个不同地址内存空间,只是x.y是临时的,然后给a.b.c赋值,调用f时,把a.b.c的值赋给x.y,但是要注意只是把值给了x.y,a.b.c里的内容不变,然后在f函数里把x.y的值交换,同样的没有改变a.b.c内存中的内容。因此,a.b.c不变,自然输出4,3,5.
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-03
#include<stdio.h>
void f(int *x,int *y)
{
int t;
if(*x<*y)
{
t=*x;
*x=*y;
*y=t;
}
}

void main()
{
int a=4,b=3,c=5;
f(&a,&b); //a=4,b=3,c=5
f(&a,&c); //a=5,b=3,c=4
f(&b,&c); //a=5,b=4,c=3
printf("%d,%d,%d\n",a,b,c);
}
这样才能改变值
第2个回答  2013-01-03
你传入的是形式参数,什么都没有改变
把f函数传入的方式改成地址就可以了
第3个回答  2013-01-03
第4个回答  2013-01-03
因为你改变的不是地址,也就是说你f函数调用完就释放了,对a,b,c没有影响,如果要交换值,可以考虑使用指针或者引用来自:求助得到的回答
第4个回答  2013-01-03
值传递,不是地址传递

c语言常见问题有哪些
1、书写标识符时,忽略了大小写字母的区别。2、忽略了变量的类型,进行了不合法的运算。3、将字符常量与字符串常量混淆。4、忽略了等号与双等号的区别。5、忘记加分号。6、输入变量时忘记加地址运算符。7、输入数据的方式与要求不符。8、输入字符的格式与要求不一致。9、输入输出的数据类型与所用格式...

C语言的问题!
4,下一步是使用浮点参数以符合浮点格式规范,或在程序中的其他位置执行浮点分配。请注意,此操作将导致加载浮点支持。5,最后一步是,当程序以混合语言编写的程序链接时,在FORTRAN库之前指定C库。重新解决了秋天的飞行问题。

计算机程序c语言面试常见问题
1、C语言程序的基本单位是___A.语句 B.函数 C.程序行 D.字符 答案:B 2、C语言程序由()组成 A.子程序 B.过程 C.函数 D.主程序段程序 答案:C 3、算法的表示方法有___A.自然语言,传统流程图,N-S流程图,伪代码,计算机语言 B.高级语言,汇编语言,机器语言 C.C语言,QBASIC语言,I...

c语言能解决哪些问题
C语言具有高度的可移植性,可以在多种不同的操作系统平台上运行,解决跨平台兼容性问题。无论是Windows、Linux还是Unix系统,C语言都能很好地适应并运行。这使得C语言在开发需要跨平台运行的应用时具有很大的优势。总的来说,C语言因其高效、灵活、可移植性强等特点,能解决从系统开发到算法实现,从性能...

c语言常见问题有哪些?
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:if (a==3)a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在“a=...

求c语言一些常见问题,
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在“...

c语言面试经常问到的问题有哪些?
c语言面试经常问到的问题有:1、C语言的主要特征是什么?C是一种过程语言。C语言的主要功能包括对内存的低级访问,简单的关键字集和简洁的样式。这些功能使其适用于诸如操作系统或编译器开发之类的系统编程。2、i ++和++i有什么区别?1)表达式“i ++”返回旧值,然后递增i。表达式++i递增该值...

C语言问题编程问题?
int i,j,n=-1;float scores[30],sum=0,temp;printf("请输入n的值(0~30):");while(n<0 || n>30) scanf("%d",&n);if(!n) return 0;for(i=0;i<n;scanf("%f",&scores[i]),sum+=scores[i],i++)printf("请输入学生%d分数:",i+1);printf("%d名学生的平均分为%.1f\\n...

C语言基本问题有哪些?
一、C语言规定总是从main()开始执行的(这个函数也叫“主函数”)。因此,你发来的题目中的(1、6、8)叙述都是错误的,都应该选择F。\\x0d\\x0a二、第2题中,C语言对其数据在内存中所占用的实际字节数,随着程序中声明的数据类型以及数据的多少而变化,C语言本身并没有明确规定。这题应该选F...

C语言弱智问题! 请帮忙解答!1个小时之类!
1、a+b=c a,b,c是3个变量,做赋值操作 ;c=a+b \/\/只要abc都有定义并且ab都赋值了就可以 2、int x=31.123 \/\/double不能直接赋值给int 可以int x = (int)31.123或将小数点去掉 3、z=x÷y x、y、z均为float型 z=x\/y \/\/float\/float结果是double 所以z应定义为double 4、x=E-...

相似回答
大家正在搜