精华内容
下载资源
问答
  • 利用指针变量实现数字的交换
    千次阅读
    2019-10-19 12:38:57

    #include<stdio.h>

    void main()

    {

    int *p1 , *p2 , *p;      //这里的 “* ” 代表定义 
    int a,b;
    scanf("%d %d" , &a,&b);
    
    p1=&a;     //a的地址给了p1 
    p2=&b;     //b的地址给了p2 
    
    p=p1;      //进行地址的交换 
    p1=p2;
    p2=p;
    	
    printf("%d %d",*p1 , *p2); //输出地址的值   *p1,*p2此时是取值 
    
     
    
    //找出最大的数并交换 输出
    /*
    if(a<b)
    {
    	p=p1;
    	p1=p2;
    	p2=p;
    } 
    
    printf("a=%d,b=%d\n",a,b);
    printf("max=%d min=%d" , *p1,*p2);
    */
    

    }

    更多相关内容
  • 利用函数实现数据值交换不使用函数实现直接赋值写函数利用指针变量写函数 不使用函数实现 数据交换值是一个非常简单的语句,我们在 不使用函数 的情况下可以这样: int a = 5;int b = 6;int num = 0; //定义两个数字...

    不使用函数实现

    数据交换值是一个非常简单的语句,我们在 不使用函数 的情况下可以这样:

    int a = 5;int b = 6;int num = 0;
    //定义两个数字a,b和一个中间变量实现数据交换
    	num = a;
    	a = b;
    	b = num;
    	printf("%d %d\n", a, b);//依次输出a,b
    

    在这里插入图片描述我们发现初始化值的a,b在依次输出时数据发生了转换。



    直接赋值写函数

    让我们用同样的思路去利用函数来完成这个练习:

    #include<stdio.h>
    int Exchange1(int a,int b){
    	int num = 0;
    	num = a;
    	a = b;
    	b = num;
    }
    int main(){
    	int x = 5; int y = 6;
    	Exchange1(x, y);
    	printf("%d %d\n", x, y); 
    	return 0;
    }
    

    在这里插入图片描述
    ?为什么输出的x,y没有交换呢?
    为什么相同的逻辑下函数却没与发生数据交换的改变呢?
    这是因为在函数运行的情况下,我仅仅改变了形式参数a,b,却没有改变实际参数x,y的值。

    让我们看看在内存中发生了什么:
    在这里插入图片描述

    如图所示,在函数运行中我只改变了a,b的值,而没有改变x,y的值。



    利用指针变量写函数

    这时我们就要利用指针变量来完成我们的任务。
    代码如下:

    #include<stdio.h>
    int Exchange2(int *a, int *b){
    	int num = 0;
    	num = *a;//*a,*b为解引用
    	*a =* b;
    	*b = num;
    }
    int main(){
    	int x = 5; int y = 6;
    	Exchange2(&x, &y);
    	printf("%d %d\n", x, y);
    	return 0;
    }
    

    注意:*a,*b是解引用的意思,,"解"就是把该地址对应的东西解开,解出来,得到值。

    在这里插入图片描述这时就成功完成我们的交换数据,在内存中的具体为:
    在这里插入图片描述0x100,0x200是自定义起名的地址,16进制。
    这就是利用函数的指针变量来交换数据的方法。

    展开全文
  • 利用指针完成两个数字交换(c语言)

    万次阅读 多人点赞 2019-03-30 11:31:43
    初学指针:子函数如何才能影响父函数

    在最近的C语言学习中,老师讲到了指针,原来就听说指针这一块比较难以理解。我把最近的学习心得分享在此。
    通常在我们的机器中都会有一系列的连续编号的或编址的存储单元,这些存储单元可以进行单个操作,也可以进行成组的操作。我们都知道,CHAR类型的数据在存储单元中占一个字节,一个SHORT类型的数据占两个字节,一个INT类型的数据占四个字节……。指针就是能够存放一个地址的一组存储单元。指针在定义时的含义是取地址,在使用时的含义是解引用在32位系统中,一个指针类型的数据占四个字节,在64位系统中,一个指针类型的数据占八个字节。
    在未学习指针之前,我们写一个交换两个数字a,b的代码,最稳定的做法就是定义一个中间变量t,int a = 1;int b = 2; int t; t=a;a = b;b = t; 这样无疑是最容易理解的。但是,在我们以后长远的学习生活来看,如果我们每次交换都要写一次未免有些过于麻烦,此时我们可以写成函数,在以后需要交换两个数字的值时,便可以直接调用。

    	#include <stdio.h>
    
    	void Swap(int a,int b)
    	{
    int tmp;
    tmp = a;
    a = b;
    b = tmp;
    printf("%d %d\n",a,b);
    }
    
    int main()
    {
    int a = 10;
    int b = 20;
    Swap(a,b);
    return 0;
    }
    

    相信对于许多初学者来说这样完全没毛病吧,对于前一段时间的我来说,这样真的没毛病。但是在最近的学习过程中我清楚了这几个问题:
    1、在子函数中打印是错误的,在运算结果来看,我们的确对了,但是我们在调用函数的时候,实参向形参传递的仅仅是它的值,而不是它的地址。例如在一条街道上,房子样式都一样,我们现在要去找一间房子,怎么找?外观都一样,我们肯定是看门牌号来寻找我们要找的房子,门牌号就是房子的一个唯一性的标识。在代码中也是一样,只有访问地址我们真正交换两个数字的值。
    在这里插入图片描述
    当我们把在主函数进行打印时便会发现其实两个代码只是换了“衣服”,实质并没有改变。

    此时我们利用下刚学习的指针来实现两个代码地址的交换,

    	void Swap2(int *p1,int *p2)
    {
    int *tmp = p1;
    p1 = p2;
    p2 = tmp;
    }
    int main()
    {
    int a = 10;
    int b = 20;
    Swap2(&a,&b);
    printf("%d %d\n",a,b);
    
    return 0;
    }
    

    在这里插入图片描述

    结果仍然没有改变。我们此时把参数类型改成了int* 类型,在主函数调用的时候我们也是取了地址。但是为什么还是错误的呢? 因为我们此时只是定义了指针,并没有在函数中解引用这个指针,指针只有解引用了,才能算是我们访问了数据地址。我们再来改一下代码,

    	#include <stdio.h>
    
    
    void Swap(int *p1,int *p2)
    {
    int tmp = *p1;
    *p1 = *p2;
    *p2 = tmp;
    }
    
    int main()
    {
    int a = 10;
    int b = 20;
    Swap(&a,&b);
    printf("%d %d\n",a,b);
    
    return 0;
    }
    

    在这里插入图片描述
    这次就是正确的啦。
    我们在子函数中,定义的tmp存取的是*p1解引用后的值,p1我们存的是a的地址,我们对其进行解引用,访问a地址,此时a存放的值是10,我们把10赋值给了tmp,同理,我们解引用p2,得到b存放的值然后再赋值给解引用后的p1,此时a地址中并没有存放数据,我们就把20存到了a,然后再用同样的方法把tmp的值存到了b地址中。从而达到了我们真正的数字的交换。

    所以我们可以总结一下:子函数的改变想要影响到父函数,必须进行两个操作:一是取指针;二是取完指针后要对指针进行解引用。

    指针虽然学习起来有些绕,但是能够把指针给学好,并用在编写代码上,我们的代码能够更加灵活进行一系列操作。

    这便是我在数字交换中对指针的理解,若有错误,欢迎大家指出。一个还在爬门槛的小白,也更希望得到大神的指点。

    展开全文
  • 指针如何交换数值

    千次阅读 2020-12-06 11:34:02
    借助第三个指针,将前两个指针的位置进行交换,等输出时即可交换了对应的数值 代码如下 #include <stdio.h> int main() { int *p1,*p2,*p,a,b; printf("please enter two integer numbers:"); scanf("%d%d...

    问题

    如何用指针交换数值

    程序分析

    借助第三个指针,将前两个指针的位置进行交换,等输出时即可交换了对应的数值

    代码如下

    #include <stdio.h>
    int main()
    {
        int *p1,*p2,*p,a,b;
        printf("please enter two integer numbers:");
        scanf("%d%d",&a,&b);
        p1=&a;
        p2=&b;
        if(a<b)
        {
            p=p1;
            p1=p2;
            p2=p;
        }
        printf("a=%d,b=%d\n",a,b);
        printf("max=%d,min=%d\n",*p1,*p2);
        return 0;
    }
    
    

    样例示范

    1,2
    a=1,b=2
    max=2,min-1
    

    总结

       借助第三指针位置交换
    
    展开全文
  • 深入理解C语言指针

    万次阅读 多人点赞 2019-09-28 08:36:51
    要知道指针的概念,要先了解变量在内存中如何存储的。在存储时,内存被分为一块一块的。每一块都有一个特有的编号。而这个编号可以暂时理解为指针,就像酒店的门牌号一样。 1.1、变量和地址 先写一段简单的代码: ...
  • ​​​前言: 我们在初学c语言时都会遇到的一个题目,那就是交换两个数字的大小,我们需要定义两个变量保存两个值,再定义一个temp进行中间值...指针(地址)变量: 类型*变量名 储存的就是指针指针变量就是一个变...
  • 文章目录常规方式用swap不用swap引用变量方式(常规方式的函数形式)指针变量方式的非函数形式指针变量方式的函数形式 常规方式 用swap #include <iostream> #include <bits/stdc++.h> using namespace ...
  • 用C语言的指针实现整型的高字节和低字节分离以及位置交换
  • 1.指针交换两个数: /*用指针交换两个数*/ #include<iostream> using namespace std; void exchange(int *x , int *y) { int temp; temp = *x; *x = *y; *y = temp; } int main() { int x = 10, y...
  • C语言_指针_互换数字

    2020-08-18 08:23:38
    目的:指针_互换数字 */ # include <stdio.h> void exchange(int* , int *); //声明函数一般不写参数,记得加分号; int main(void) { int a = 3; int b = 5; // exchange(*p, *q); 是错误的 // ...
  • #include <bits/stdc++.h> using namespace std; void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } int main() { int a = 1, b = 2; swap(a, b); cout << a <...
  • 首先,我们来看看不使用函数,怎么实现两个数字交换呢? #include <stdio.h> int main() { int a = 50; int b = 100; int temp = a; a = b; b = temp; printf("a=%d b=%d\n", a, b); system("pause")...
  • 关于用指针交换两个数

    千次阅读 2018-12-14 12:08:30
    关于用指针交换两个数 西邮Linux 兴趣小组又到了纳新季,作为一个...所以在这里总结一下关于用一级 二级指针交换两个数字的问题。 一级指针交换 #include&amp;lt;stdio.h&amp;gt; int swap(int *c , int *...
  • void swap(int *a, int *b)//参数是俩个指针变量 { int temper; temper = *a;//把a指向的值进行赋值 *a = *b; *b = temper; cout << *a << " " << *b; } int main() { int a = 3, b = 5; ...
  • 从键盘任意输入两个整数,用指针作函数参数,编程实现将其交换后再重新输出。 函数接口: void swap(int *x, int *y) 输入格式: 从键盘输入两个整数。 输出格式: 按输出样例的形式输出交换后的两个整数。 样例...
  • 方法一:运用数组元素间进行逻辑运算来实现交换 #include &amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;stdlib.h&amp;amp;gt; int main(){ int i,j,k; int A[10]; int B[10]; ...
  • 不用中间变量交换两个变量的值

    千次阅读 2020-01-28 13:25:15
    我们刚学编程的时候遇到需要交换两个变量的值时通常都会定义一个中间变量,比如: #include <iostream> int main() { int a = 4, b = 5; int c = a; a = b; b = c; std::cout << "a =...
  • 指针实现数字a和数字b的互换

    千次阅读 2014-11-05 16:32:56
    上面的程序就完全可以实现数字 a 和数字 b 的互换功能的,但是为了深刻的理解指针的重要作用,我们要尝试利用指针实现数字 a 和数字 b 的互换功能。 首先来看下面的程序: void   swap _1 (int p, ...
  • C语言,交换任意两个字符型变量的值并输出结果。要求:利用getchar和putchar函数。以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!C语言,交换任意两...
  • 通过Swap函数交换两个变量的值

    千次阅读 2020-10-13 20:34:17
    定义一个整形变量tmp,p1=&a ,p2=&b,首先在tmp里存入a的值,然后将b的值赋给a,再将tmp里的值赋给。这样就完成了a与b两个数的交换。 我们经常会发现自己写出的程序并不能达到我们的要求,在写这类题的时候...
  • 2:利用指针传入函数地址在函数内部进行利用中间变量交换;3:将两个需要交换的数进行加减运算进行交换;注:因C语言有浮点数之分,不可以认为乘除也可进行交换。4:将两个数进行亦或运算,也可以实现交换两个数的...
  • 数据交换在C语言中十分常见。作为初学者首先学的应该都是如下方式: int main() { int a = 10; int b = 20; int tmp = a; a = b; b = tmp; printf("%d,%d\n",a,b); return 0; } 这种交换如果放在一个函数...
  • 用函数实现两个数字内容的交换,你可能会这样做: void change_num(int a, int b) { int tmp = a; a = b; b = tmp; } 感觉太简单了阿,然后调用函数,大功告成 结果发现,,,emmm,不对啊 内容没有交换,瓦特?...
  • 实现Swap函数,将两个数交换

    千次阅读 2020-12-16 14:29:32
    刚刚对指针做了基础的学习,那么指针的作用在哪里呢,我们就用Swap函数作一下分析。 void Swap(int a, int b)//交换不成功 { int tmp = a; a = b; b = tmp; } int main() { int a = 10; int b = 20; printf("交换前:...
  • 【C语言】用子函数进行两个变量的值交换

    千次阅读 多人点赞 2018-05-26 11:37:41
    用子函数进行两个变量的值交换 1.直接用两个变量进行传参,交换。在子函数内部进行打印。 void Swap(int a,int b) { int tmp = a; a = b; b = tmp; printf("a=%d,b=%d\n",a,b); } int main() { int a=5; ...
  • 实现两个数互换的八种方法基本数据类型借助第三个变量package贪心;/*作者:XiangLin创建时间:2020/9/1522:48文件:XX.javaIDE:IntelliJIDEA*/importjava.util.Random;publicclassExchange1{publicstaticvoidmain...
  • 1、利用其他变量进行a,b值的互换。(互换成功) #include <stdio.h> int main() { int a=3; int b=5; int t;//利用其他变量进行互换 t=a; a=b; b=t; printf("a=%d,b=%d",a,b); return 0; } 2、利用函数形参...
  • 本关任务: 从键盘输入任意3个整数给a,b,c变量,用算法实现按从小到大的... 其中,“类型说明符”表示本指针变量所指向的变量的数据类型,“指针变量名”即为定义的指针变量名标识符。 例如有定义“int *p1;”,表示p
  • c语言交换两个字符:方法一:利用指针传址,效率比较高void swap(int *a,int *b){int temp;temp = *a;*a = *b;*b = temp}方法二:利用引用加减或乘除运算来交换,存在缺陷,有可能导致溢出swap(int &a,int &...
  • 使用函数实现两个数的交换(C语言)

    万次阅读 多人点赞 2018-12-23 23:47:40
    使用函数实现两个数的代码。 常规思路: 定义函数,调用函数,完成交换。 你的代码是否和下面一样呢? #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; void Swap(int a,int b) { int...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,660
精华内容 12,664
热门标签
关键字:

利用指针变量实现数字的交换