5、使用C语言编写一个函数,用于交换两个变量的值(地址传递)。

作者&投稿:翁凯 (若有异议请与网页底部的电邮联系)
用地址传递 交换两个变量的值 怎么用C语言实现~

void swap(int *a,int *b)
{
int c;
c = *a;
*a = *b;
*b = c;
}

#include
void Swap(int a,int b)
{
int tmp = a;
a = b;
b = tmp;
printf("a=%d,b=%d
",a,b);
}
int main()
{
int a = 5;
int b = 10;
printf("a=%d,b=%d
",a,b);
Swap(a,b);
printf("a=%d,b=%d
",a,b);
return 0;
}

扩展资料:
形参和实参的特点
1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。
参考资料:
百度百科-形参

不知道你要交换的两个变量类型,所以这里以整型数据交换为例,以下swap函数实现了交换两个整型变量值的功能:

#include <stdio.h>

// 交换给定指针指向整型变量的值。
// 参数:
// a -> 指向第一个变量的指针
// b -> 指向第二个变量的指针
void swap(int* a, int * b);

int main(int argc, int argv)
{
int a = 3, b = 5;
printf_s("交换前:a = %d, b = %d
", a, b);
swap(&a, &b);
printf_s("交换后:a = %d, b = %d
", a, b);
return 0;
}

// 交换给定指针指向整型变量的值。
// 参数:
// a -> 指向第一个变量的指针
// b -> 指向第二个变量的指针
void swap(int* a, int* b)
{
// 声明一个临时变量,保存第一个指针指向变量
// 的值。
// 其中 *a 是取出 a 指针指向变量的值
int temp = *a;
// 将 b 指针指向的值赋值给 a 指针指向变量
(*a) = (*b);
// 将临时变量 temp 中保存的 a 指针指向变量的值赋值给
// b 指针指向的变量。
(*b) = temp;
}

以上代码运行结果如下:

以下代码实现了使用宏定义作为模板,声明不同类型交换函数的功能,以下以声明double和float为例:

#include <stdio.h> 

// 声明一个函数代码模板,逻辑参考 swap(int* a, int* b)
#define DEF_SWAP_FUNC(Type) void swap_##Type(Type* a, Type* b) \
{ \
Type temp = (*a); \
(*a) = (*b); \
(*b) = temp; \


// 使用模板声明并实现一个 double 类型变量交换函数,函数名为 swap_double
DEF_SWAP_FUNC(double)

// 使用模板声明并实现一个 float 类型变量交换函数,函数名为 swap_float
DEF_SWAP_FUNC(float)

int main(int argc, int argv)
{
// double 类型数据交换
double da = 5.6, db = 3.5;
printf_s("double 交换前:da = %lf, db = %lf
", da, db);
swap_double(&da, &db);
printf_s("double 交换后:da = %lf, db = %lf
", da, db);

// float 类型数据交换
float fa = 3.4, fb = 6.8;
printf_s("float 交换前:fa = %f, fb = %f
", fa, fb);
swap_float(&fa, &fb);
printf_s("float 交换前:fa = %f, fb = %f
", fa, fb);

return 0;
}

运行结果如下:




用c语言写一个爱心的程序
首行答案:可以使用C语言编写一个打印爱心的程序。C语言是一种通用的编程语言,它具有丰富的语法和库函数,可以实现各种复杂的功能。其中,打印图形是C语言的一个常见应用之一。下面是一个使用C语言编写的打印爱心的示例程序:c include int main() { int i, j, n;float x, y;printf("Enter the ...

如何用c语言编写一个指针变量?
在C语言中,指针变量是一个存储其他变量地址的变量。以下是如何在C语言中声明和初始化一个指针变量的示例:在这个例子中,我们首先声明并初始化了一个整数变量 num。然后,我们声明了一个指针变量 ptr。接着,我们使用 & 运算符获取 num 的地址,并将这个地址赋值给 ptr。最后,我们使用 printf 函数...

用C语言编写一个简单程序,有哪些步骤,可以举一个例子详细讲解下吗?_百 ...
\/\/以Helloworld示例 \/\/先使用编辑工具如windows的记事本或vc++环境,或linux的vim编辑器创建一个hello.c文件 \/\/打开文件后,如下 步骤写程序 include <stdio.h>\/\/首先要引入c语言的标准输入输出库文件,因为这个文件里有已经定义好的可以使用的函数 \/\/接下来需要写一个main函数,这也是c语言程序里必...

如何用c语言编写一个程序,实现按从大到小的顺序排序输出10个数_百度知...
用选择排序法编写c语言,实现从键盘上输入10个数,按从大到小的顺序排序输出。代码如下:include<stdio.h> int main(){ int i,j,a[10],t;printf("输入数");for (i = 0; i < 10; i++)scanf("%d",&a[i]);for (i = 0; i < 10; i++){ for (j = i + 1; j < 10;j...

如何用c语言编写一个程序来输出除以二的余数?
1、首先,我们需要打开任意编程软件,小编使用的是Dev c++ 2、然后,我们需要新建一个源代码, 如下图所示 3、然后我们需要输入代码 include <stdio.h>int main(){int i=0;scanf("%d",&i);int j;j=i%2;printf("%d",j);return 0;}表示取输入的数除以二的 余数 。4、最后,我们编译测试...

用C语言编写一个可以产生1~99随机数的函数
可以使用C语言标准库中的srand()和rand()来生成随机数,同时要生成1~99之间的随机数,只需要将生成的随机数与99整除,取其余数+1即可保证所有产生的随机数在[1,99]的区间之内。示例代码如下:include<stdio.h>#include<stdlib.h>#includeint main(){int a,i;srand((unsigned)time(NULL));\/\/初...

编写一个c语言程序 求两个整数的最大公约数
下面给出一个使用C语言实现求两个整数的最大公约数的示例代码:```c include <stdio.h> int gcd(int a, int b);int main() { int a, b, result;printf("请输入两个整数:");scanf("%d %d", &a, &b);result = gcd(a, b);printf("两个数的最大公约数为:%d", result);return...

如何用c语言编写一个能够正确运行的程序?
所以针对我的回答,这里做个确定的补充,scanf("%s", &name);和 scanf("%s", name);两者都可以编译通过,因为 scanf 的第二个参数只要是指针就可以,但是,敲黑板!千万不要使用 scanf("%s", &name) 这种方式,除!非!你!知! 道!你!在!干!什!么!,因为这会造成 C语言上经常会发生...

编写程序,输入一个整数a.输出表达式a+=15的值?
以下是使用C语言编写的程序,用于输入一个整数a,然后输出表达式a+=15的值:c include <stdio.h> int main() { int a;printf("请输入一个整数a:");scanf("%d", &a);a += 15;printf("表达式a+=15的值为:%d\\n", a);return 0;} 程序首先使用printf函数提示用户输入一个整数a,然后...

用c语言编写:编写一个函数,由实参传来一个字符串,统计此字符串中字母...
include <stdio.h> include <string.h> int letter,number,blank,other;void count(char str[]){ int i;for(i=0;str[i]!='\\0';i++){ if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))letter++;else if(str[i]>='0'&&str[i]<='9')number++;else...

邢台县14719587858: C语言:函数Compare()用于交换两个整型数据,且该函数不含数据输出功能. -
延吴三代: #include#include#include void Compare(int *n,int *m) { int k; k=*n;*n=*m;*m=k; } void main() { int a,b; srand((unsigned int)time(NULL)); a=rand()%100; b=rand()%100; if ( a>b ) Compare(&a,&b); printf("%d %d\n",a,b); }

邢台县14719587858: C语言: 请自定义一函数用来交换两个整型变量的值,(提示:形式参数使用两个指针变量)并在主函数中调 -
延吴三代: #include void swap(int *p,int *q) { int t; t=*p; *p=*q; *q=t; } main() { int a=5,b=4,*p,*q; p=&a; q=&b; swap(p,q); printf("a=%d b=%d",a,b); return 0; } ..

邢台县14719587858: c语言 编写一个使用指针的c函数,交换数组a和数组b中的对应元素 -
延吴三代:#include<stdio.h> int main() { int Ii = 0, Itemp; int array_a[5] = {1,2,3,4,5}; int array_b[5] = {6,7,8,9,0}; int *a,*b; a=array_a; b=array_b;while( Ii < 5 ) { Itemp = *(a + Ii); *(a + Ii) = *(b + Ii); *(b + Ii) = Itemp; Ii ++; }Ii=0; while(Ii < 5) // 交换后的a { printf("%d\t...

邢台县14719587858: 定义一个函数,从主调函数接收两个数据,并使之交换.如何用c 语言写此段程序?? -
延吴三代: #include <iostream> using namespace std;void swap(int *x, int *y); int main(){ int x = 5, y = 10;cout << "Main. Before swap, x: " << x << " y: " << y << endl; swap(&x,&y); cout << "Main. After swap, x: " << x << " y: " << y << endl; return 0;} ...

邢台县14719587858: c语言程序设计,写一个函数,将数组中n个元素的最大值和最小值交换,应用函数的调用. -
延吴三代: void exchange(int a[],int n) { int max = a[0],min = a[0],maxIndex=0,minIndex=0; for(int i=1;i<n;++i) { if(a[i] > max){max = a[i];maxIndex = i;} if(a[i] < min){min= a[i];minIndex = i;} } int tmp = a[maxIndex]; a[maxIndex] = a[minIndex]; a[minIndex] = tmp; }

邢台县14719587858: 高分急求c++用引用传递写两个集合的交集函数 -
延吴三代: //代码如下:#include<stdio.h> void intercop(int a[], int n, int b[], int m, int c[], int &t){ t = 0; for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ if (b[j] == a[i]){ c[t++] = a[i]; break; } } } } void main() { int n = 5; int m = 6; int t; int a[5] = { 1, 2, 3, 4, 5 }; int b[6] = { 3,...

邢台县14719587858: 一条c语言题目, 运用动态数组来求整型数组交集 -
延吴三代: 请用汉语说,你的思路是哪样的 我感觉,题的意思是这样的:给定两个静态数组,作两个待比较的集合,然后从个数比较小的集合中取一个数,与个数较大的集合的每个元素比较,若相等动态数组重申请空间,并将该元素,赋值给数组.我也不明白你的意思,如果是你那个想法不是已经解决了吗,输出这个元素是公共元素就好了啊

邢台县14719587858: C语言五个常用函数编写一个程序,使用的函数不限,完成的功能也不限 -
延吴三代: #include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> #include<process.h> void main() { int a=-5;int b=2; char s1[20],s2[20],*s3; a=abs(a); printf("%d\n",a); b=pow(b,a); printf("%d\n",b); strcpy(s1,"abcd"); strcpy(s2,s1); ...

邢台县14719587858: 使用Visual C++语言 编写一个函数完成两数交换,并用主函数调用它.(引用传递) -
延吴三代: #include<stdio.h> void f(int *x, int *y){int *t;*t=*x;*x=*y;*y=*t; } main() { int a,b;scanf("%d%d",&a,&b);f(&a,&b);printf("%d %d\n",a,b);}

邢台县14719587858: 使用c语言程序设计,编写一个函数,用于将一个数值型字符串转化为整型数值 -
延吴三代: 12345678910111213141516171819202122 #include <stdio.h> longs2i(char*s); intmain(void) { printf("%ld\n",s2i("-123456")); return0; } longs2i(char*s) { longn=0,sign=1; while(*s) { switch(*s) { case'+':sign=1;break; case'-':sign=-1;break; default:n=n*10+*s-'0';break; } s++; } returnsign*n; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网