zoukankan      html  css  js  c++  java
  • 指针专题3-指针作为函数参数

    1 使用指针变量作为函数参数

      用指针变量作为函数参数可以将函数外部的地址传递到函数内部,使得函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。

    有些初学者会使用下面的方法交换两个变量的值:

    void swap(int a, int b)
    {
        int temp;  //临时变量
        temp = a;
        a = b;
        b = temp;
    }
    
    void main()
    {
        int a=11, b=99;
        swap(a, b);  
    }

      其结果是a、b的值并没有发生改变,交换失败。这是因为swap函数内部的a、b和main函数内部的a、b是不同的变量,占用不同的内存。正确做法是使用指针变量参数。

    void swap(int *a, int*b)
    {
      int temp;
      temp = *a;
      *a=*b;
      *b=temp;        
    }
    
    void main()
    {
      int a=11, b=99;
      swap(&a,&b);  
    }

     2 使用数组指针作为函数参数

      数组是一系列数据的集合,无法通过参数将它们一次性传递到函数内部,如果希望函数内部操作数组,必须传递数组指针。

    /*
    将数组由大到小排序 冒泡排序
    */
    void max(int*arr, int len)
    {
        int i,j,temp;
        for(i=0;i<len;i++){
            for(j=0;j<len-i-1;j++){
                if(arr[j]<arr[j+1]){
                    temp=arr[j+1];
                    arr[j+1]=arr[j];
                    arr[j]=temp;
                }
            }
        }
     } 
    void main(){
        int num[6];
        int len=sizeof(num)/sizeof(int);
        for(k=0;k<len;k++){
            scanf("%d",num+k);
        }
        max(num, 6);
        for(k=0; k<len; k++){
            printf("%d ",num[k]);
        }
    }

      3 使用数组作为函数参数

      C语言中,当数组作为函数的形参时,编译器必须把数组形式改成指向数组第0个元素的指针形式。即编译器只传递数组的地址,而不是整个数组的拷贝。

    void func(int arr[  ]){ ...... }
    void func(int arr[5]){ ...... }

    等价于:

    void func(int *parr){ ...... }

      在函数内部,arr是一个指针变量,sizeof(arr)=4。

  • 相关阅读:
    Python 自省指南(原文http://www.ibm.com/developerworks/cn/linux/l-pyint/#ibm-pcon)
    PyDev for Eclipse 简介
    (转)盘点前 10 名的免费跨浏览器测试工具
    使用 JMeter 完成常用的压力测试
    Python 单元测试框架 —— PyUnit
    runtime实现对象存储型数据库——LHDB
    从零实现一个基于UDP的iOS聊天程序(一)-- GCDAsyncUdpSocket源码解析
    hadoop实战随笔_070818
    hadoop实战笔记_170816
    hadoop实战随笔_170814
  • 原文地址:https://www.cnblogs.com/Mike2019/p/11809239.html
Copyright © 2011-2022 走看看