要用函数实现两个数的交换,则函数参数必须定义为指针形式,否则函数中对数值的修改将不会影响主调函数,这是C语言的规则。
创新互联长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为尼元阳企业提供专业的成都网站制作、成都做网站、外贸营销网站建设,尼元阳网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。
所以,以整型为例,自定义函数书写如下:
void
swap_int(int*a,int*b)
{
int
t;
t
=
*a;
*a=*b;
*b=t;
}
#include"stdio.h"int swap(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;}
main(){int x,y;printf("请输入x与y的值,用空格隔开\n");scanf("%d%d",x,y);printf("x=%d,y=%d\n",x,y);swap(x,y);printf("交换后\nx=%d,y=%d\n",x,y);}
扩展资料:
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
参考资料:百度百科-C语言
c语言中用函数交换两个变量的值方法是先将变量赋值给中间变量,然后中间变量再赋值给另外一个变量,程序如下:
#include "Stdio.h"
#include "Conio.h"
void swap(int x,int y)
{
int t,m;
t=x; //变量x赋值给中间变量t
m=y; //变量y赋值给中间变量m
x=m; //中间变量m赋值给变量x,将y的值赋值给了x。
y=t; //中间变量t赋值给变量y,将x的值赋值给了y。
}
main()
{
int a,b;
a=1,b=2;
swap(a,b); //调用交换函数
printf("%d,%d",a,b);
getch();
}
扩展资料:
C语言的语法结构:
1、顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
例如:a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子里面的水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c = a; a = b; b = c;执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b =c;则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。
顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三步曲的程序就是顺序结构。
2、选择结构
对于要先做判断再选择的问题就要使用选择结构。选择结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。选择结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的选择语句。
选择结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。
3、循环结构
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do while循环和for循环。
四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误。
参考资料来源:百度百科-C语言
运用代码解释指针运用的理解如下:
#includeiostream
using namespace std;
int fun1 (int a,int b)
{
int c;
c=a;a=b;b=c;
cout"a1:"a";b1:"bendl;
}
int fun2 (int *a,int *b)
{
int *c;
c=a;a=b;b=c;
cout"a2:"*a";b2:"*bendl;
}
int fun3(int *a,int *b)
{
int *c;
c=*a;*a=*b;*b=c;
cout"a3:"*a";b3:"*bendl;
}
int fun4 (int *a,int *b)
{
int c;
c=*a;*a=*b;*b=c;
cout"a4:"*a";b4:"*bendl;
}
int fun5 (int a,int b)
{
int c;
c=a;a=b;b=c;
cout"a5:"a";b5:"bendl;
}
int main()
{
int aa=1,bb=2;
fun1(aa,bb);
cout"aa1:"aa";bb1:"bbendl;
fun2(aa,bb);
cout"aa2:"aa";bb2:"bbendl;
fun3(aa,bb);
cout"aa3:"aa";bb3:"bbendl;
fun4(aa,bb);
cout"aa4:"aa";bb4:"bbendl;
aa=1,bb=2;
fun5(aa,bb);
cout"aa5:"aa";bb5:"bbendl;
return 0;
}
输出结果为:
a1:2;b1:1
aa1:1;bb1:2
a2:2;b2:1
aa2:1;bb2:2
aa3:1;bb3:2
a4:2;b4:1
aa4:2;bb4:1
a5:2;b5:1
aa5:2;bb5:1
main中调用fun1()时,将实参a,b的值传递给了交换函数,如果此时在swap1中打印,可以看到结果是正确的,但是该过程其实是将aa和bb分别复制了一份给了函数,执行完fun1()之后,aa和bb的值没有任何变化。
fun2(),看似的确使用了指针,但还是失败,因为这里是将aa和bb的地址给交换了,而并没有交换aa和bb的值。在这里由于未给c赋值,c中并没有确定的值,c中的值是不可预见的。此时c可能指向一个未知的存储单元。
而严重的情况是,该单元的数据可能是有用的,因此fun2()不但没有实现两个数的交换,反而给系统的稳定性带来威胁。
fun3(),将int赋值给int *,编译错误。
fun4()是正确的。为了在函数中改变了的变量能被其它函数调用,正确的办法是用指针变量作为函数参数,在函数执行过程中使指针变量所指向的变量值发生变化。
函数调用结束后,哲别变量值的变化依然保留下来,这样就实现了通过函数调用是变量的值发生变化,在其它函数中可以使用这些改变了的值的目的。
fun5()也是正确的,这是引用的重要应用之一。对于引用的操作实际上是作用在引用所因的对象上。
扩展资料
在函数中的参数,并不是调用者的变量,而是临时申请的变量a和b存放main函数中变量a和b的值,并在函数中用来计算,在fun中给a和b赋值都是在操作这两个临时申请的变量,函数返回后,这两个变量被舍弃,函数调用也没有将这两个临时变量的值返回给main函数中调用使用的参数功能。
所以,在函数中要操作调用者申请的变量,需要给出它们的指针,函数中用指针来找到这些变量的位置和内容。
#include
stdio.h
void
change(int
*a,int
*b){
int
m;
//定义一个临时变量
m
=
*a;
//把a指向的值放到m中
*a
=
*b;
//把b指向的值放到a指向的内存中
*b
=
m;
//把m中的值放到b指向的空间中,函数调用结束时m的生成周期也完了,就释放掉了
}
int
main(){
int
i
=
1;
int
j
=
2;
change(i
,j);
//函数调用
printf("%d,%d\n",i,j);
return
0;
}
#include stdio.h
void Swap1(int* a, int* b)
{
int c = *a;
*a = *b;
*b = c;
}
main()
{
int a, b;
scanf("%d,%d", a, b);
printf("\na=%d,b=%d", a, b);
Swap1(a, b);
printf("\na=%d,b=%d", a, b);
}