C语言中交换两个数为什么一定要用指针和调用函数? C语言关于调用函数交换2数的问题,请问为什么用了指针才能交换...

作者&投稿:贝邦 (若有异议请与网页底部的电邮联系)

我刚入门的时候也是这样想的,哈哈。

但是随着你学的深入,你会知道指针才是c语言的灵魂。

用函数交换变量,如果不用指针的话,是无法进行的,因为函数只能改变形参,而对于主函数的实参,是没有交换作用的(这里得好好想想,初学可能会糊涂的点就在这)

指针的作用很多的,下面是我上课做的一些笔记,你可以看看。

有什么问题再追问我哦~


 指针的重要性

表示一些复杂的数据结构

快速的传递数据,减少内存的耗用

使函数返回一个以上的值

能直接访问硬件

能够方便地处理字符串

是理解面向对象语言中引用的基础

总结:指针是c语言的灵魂



解释下为什么C语言中用函数交换两个数的值只能用指针,而不能用这个方法。。还有如果用全局变量该怎么写~

因为在函数中的参数,并不是调用者的变量,而是临时申请的变量a和b存放main函数中变量a和b的值,并在函数中用来计算,在fun中给a和b赋值都是在操作这两个临时申请的变量,函数返回后,这两个变量被舍弃,函数调用也没有将这两个临时变量的值返回给main函数中调用使用的参数功能。
所以,在函数中要操作调用者申请的变量,需要给出它们的指针,函数中用指针来找到这些变量的位置和内容。

值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

指针传递:可以改变指针指向内容的值,但是不能改变指针本身,无需复制开销。

你百度一下,值传递,指针传递,可以看到更多的内容。

C语言中调用函数交换两个变量的值需要传递地址,为什么相加就可以直 ...
答:举个栗子:有100个房间,从0到99编号,每个房间放在不同的食材。交换两个变量的值 只需要告诉你把A房间和B房间的东西调换,你不需要知道房间里面放的是什么。只需要知道AB的房间号;加法:如果问你A房间和B房间里的食材可以做什么菜,你就需要知道AB房间分别放了什么。不需要知道房间号。

C语言用指针法交换两个数的顺序问题
答:解答:1. 注意形式参数和实际参数的区别,主函数中的x,y是实际参数,swap函数中的a,b是形式参数。他们各有自己的存储空间,互不干扰。2. 在程序适当位置加上输出地址的语句,即可看出为什么回到主程序后,x,y的值为什么不交换。为了更形象,可以用图表示它们的关系:可见,交换的只是swap函数...

c语言 函数调用 swap函数 一定要用指针吗
答:不一定。void swap(int a,int b){ int t;t=a;a=b;b=t;} 这样写,只是传了一份拷贝给a,b,交换好后,栈清空,没有传回给你原来所要交换的数。而printf放里面可以是因为你的那份拷贝(即a,b)的值是跟你要交换的数一样的,所以行得通。不用指针的方法就是:void swap(int &a,int ...

C语言怎么用自定义函数将两个数交换
答:要用函数实现两个数的交换,则函数参数必须定义为指针形式,否则函数中对数值的修改将不会影响主调函数,这是C语言的规则。所以,以整型为例,自定义函数书写如下:void swap_int(int*a,int*b){ int t;t = *a;a=*b;b=t;}

C++中,假设b=10,a=8;要使ab两个数交换时用到t=b,b=a,a=t; 请详细解释...
答:在信息交换过程中为了保持信息的完整所以在将a赋值给b时将b的信息保存在t,在a=t。所以还有做法是:a=a+b;//保存了二者和的信息 b=a-b;a=a-b;这方法不借助中间变量

C语言中,怎样不用中间变量而互换两个变量的值呢?
答:有两种方式可以不使用中间变量,交换同类型的变量a,b的值:1 .使用加法操作a+=b; b=a-b;a -= b;2 .使用异或操作:a^=b;b^=a;a^=b;C语言运算符是说明特定操作的符号, 它是构造C语言表达式的工具。C语言的运算异常丰富,除了控制语句和输入输出以外的几乎所有的基本操作都为运算符处理。除...

C语言中,为什么交换两个数后,都变成了同一个数?
答:你传的变量是地址,然后把指针变量t的地址指向x地址里的内容,结果当然错。改成这样。int* t;t = x;x = n;n = t;

用函数交换两个数的值,必须要指针吗
答:不用指针了可以啊,例如交换a和b的值(前提不溢出)a +=b;b=a-b;a=a-b;如果你问为什么swap(int a,int b)无法交换,这是因为实参是形参的拷贝。想象有一个对手下非常不信任的老板,他的手上的文件是形参,手下的实际操作的文件都是从他手上复印的,因此可以理解成实参。无论手下如何努力修改...

乘法交换律为什么要定义两个数相乘
答:没有说必须是2个数相乘,3个数,4个数乃至更多数相乘,都满足乘法交换律。但是3个数、4个数乃至更多数相乘,各个乘数要交换位置,还会涉及乘法结合律。但是无论多少个数相乘,2个数相乘都是基础。一旦2个数相乘,符合了交换律。再和乘法结合律一起,那么就可以由此得出3个数、4个数乃至更多数相乘...

C语言效率问题-两个整型数的交换
答:赋值操作是,取数,存数。通常,取存数操作的时间消耗高于寄存器操作,故假定,寄存器加、减操作的时间消耗为1,存储器取存操作的时间消耗为2,依次累计以上三种交换操作来比较优劣,注意这里用的是int类型数据的操作,浮点型数据操作校友区别。方法1:int c = a; a = b; b = c;2 + 2 + 2 =...