zoukankan      html  css  js  c++  java
  • C:指针函数一些误区

    当我们学完指针,知道每个数在内存中都占有一定的字节,也就是地址,才有取地址符号&,所以要交换两个数必须把这两个数所对应的内存互换,比如a=2;b=3;要让它们互换且输出,我们用一个函数来试试

     1 #include "stdio.h"
     2 int temp(int x,int y)
     3 {
     4     int c;
     5     c=x;
     6     x=y;
     7     y=c;
     8     }
     9 void main()
    10 {
    11     int a,b;
    12     a=2;
    13     b=3;
    14     temp(a,b);
    15     printf("a=%d,b=%d",a,b);
    16 }

    很显然,这个方法并不行,它只是在表面互换a,b的值,并且函数只有在运行的时候是有内存的,当结束时,函数的内存便撤掉,让我们再看一个更让人误解的例子:

     1 #include "stdio.h"
     2 int temp(int x,int y)
     3 {
     4 int *p,*q,t;
     5 p=&x;
     6 q=&y;
     7 t=*p;
     8 *p=*q;
     9 *q=t;
    10 }
    11 void main()
    12 {
    13    int a,b;
    14    a=2;
    15    b=3;
    16    temp(a,b);
    17    printf("a=%d,b=%d",a,b); 
    18 }

    上面函数用了指针为什么还是不行?其实跟上一个例子差不多,在主函数main()中调用temp(a,b)作为实参传递给int temp(int x,int y)形参期间传递的是值2,3;并不是a,b的地址,然后取的是2,3的地址,结果就是2,3的地址互换,然而a=2,b=3还是没变,接下来看个正确是例子:

     1 #include "stdio.h"
     2 int temp(int *p,int *q)
     3 {
     4 int t;
     5 t=*p;
     6 *p=*q;
     7 *q=t;
     8 }
     9 void main()
    10 {
    11     int a,b;
    12     a=2;
    13     b=3;
    14     temp(&a,&b);
    15     printf("a=%d,b=%d",a,b); 
    16 }

    运行结果:,这时实参是temp(&a,&b);互换a,b的地址。

  • 相关阅读:
    python-Mitmproxy抓包
    pytest-html、cov、xdist
    python-unittest添加用例的几种方式
    python-*args、**kargs用法
    One,Two,Three,Ak模板
    栈和队列小练习
    区块链入门介绍笔记
    Research on Facebook and Social Graph
    线段树板子的小修改
    htaccess远古时期技术了解一下
  • 原文地址:https://www.cnblogs.com/doudoublog/p/5182485.html
Copyright © 2011-2022 走看看