C 指针

主要内容

  • 指针
  • 函数指针
  • 全局变量和函数返回值
指针
  • 什么是指针?
    • 指针就是变量的地址
  • &取地址操作符

    &myVar;
  • 如何声明指针变量

    int *mypointer; 或者 int* myPointer;(不推荐)
    int表示指针内存放的数据类型,*表示声明的是指针,myPointer指针变量的名字
  • 如何使用指针

    int *myPointer;
    int myVar;
    myPointer = &myVar;
    *myPointer = 27;
       myVar的值是多少呢?为什么?
       因为指针变量myPointer的地址指向myVar的存放地址,所以当给myPointer地址内存放27时,
       myVar的存放地址内的值也是27,即myVar = 27.
函数参数
  • 什么是函数参数

    • 函数的参数是用于在函数调用的地方与被调用函数之间共享变量。比如说
      我们要实现一个加法功能的函数addTwos(),addTwos()使用两个数值,然后将数值相加,返回它们的和。但问题是 1,函数如何获取原始的两个数据的值? 2,函数调用繁荣地方如何得到addTwos()计算的和? 答案就是使用函数参数!
  • 变量的作用域

    • 在C语言中每一个变量都有作用域。当变量在程序的某个部分被声明时,它只有在程序的一定区域才能被访问,这个区域就是变量的作用域。总体来说,在C语言中编译器可以确认4种不同类型的作用域:

      • 文件作用域
      • 函数作用域
      • 代码块作用域
      • 原型作用域
    • 函数作用域

      • 函数作用域指的是:变量在函数中声明,那么此变量是
        这个函数的局部变量,只能在这个函数内被访问和使用。换 句话说,你不能在一个函数中声明一个变量,然后在另外一 个函数中来引用。例如:
      ERROR:
      
      #include <stdio.h>
      
       int main (int argc, const char * argv[]) {
       int    numDots;
       numDots = 500;
       DrawDots();
       return 0; 
      }
      void DrawDots( void ) {
      int    i;
      for ( i = 1; i <= numDots; i++ )
          printf( "." );
      }
  • 函数参数如何工作

    • 函数参数与变量类似,所不一样的是函数的参数在参数列表里声明,即:函数声明中两个圆括号之 间。例如:

      
      #include <stdio.h>
      
      void DrawDots( int numDots ); //numDots函数参数
      int main (int argc, const char * argv[]) {
        DrawDots( 30 );
           return 0;
      }
      void DrawDots( int numDots ) {
        int  i;
        for ( i = 1; i <= numDots; i++ )
            printf( "." );
      }
      函数参数都是临时参数,当函数调用的时候,临时变量被创建,当函数退出后,变量销毁。
  • 行参和实参

    传给函数的实际值叫做实参;函数定义中参数列表用于接收实参的参数叫做形参。
      void DrawDots( int numDots ); //numDots是形参
      DrawDots( 30 ); //30是实参
  • 指针在函数中的作用

    
    #include <stdio.h>
    
    void ChangeVarValue( int numDots );    
    int main (int argc, const char * argv[]) {
        int  numDots;
        numDots = 30;
        ChangeVarValue( numDots );
        printf( "in main numDots’s value: %d\n”,numDots );
        return 0;  }
    void  ChangeVarValue( int numDots ) {
         numDots = 40;
         printf( "numDots’s value is %d\n”,numDots );
    }
    
    #include <stdio.h>
    
    void ChangeVarValue( int *numDots );       
    int main (int argc, const char * argv[]) {
        int    numDots;
        numDots = 30;
        ChangeVarValue( &numDots );
        printf( “in main numDots’s value: %d\n”,numDots );
        return 0;  }
    void  ChangeVarValue( int *numDots ) {
         *numDots = 40;
         printf( “numDots’s value is %d\n”,*numDots );
    }
全局变量和函数返回值
  • 全局变量和函数返回值是另外两种在不同的函数中共享数据的机制
  • 全局变量顾名思义是指在整个源文件内,所有函数都可以访问,修改的变量

    
    #include <stdio.h>
    
    void ChangeVarValue( int *numDots );    
    int main (int argc, const char * argv[]) {
        int    numDots;
        numDots = 30;
        ChangeVarValue( &numDots );
        printf( “in main numDots’s value: %d\n”,numDots );
        return 0;  }
    void  ChangeVarValue( int *numDots ) {
         *numDots = 40;
         printf( “numDots’s value is %d\n”,*numDots );
    }
    
    #include <stdio.h>
    
    void PassAlong( void );
    void PrintMyVar( void );
    int gMyVar;//全局变量的声明方法注意变量前的g
    int main (int argc, const char * argv[]) {
        gMyVar = 10;
        PassAlong();
    return 0;
    }
    void PassAlong( void ) {
        PrintMyVar();
    }
    void PrintMyVar( void ) {
        printf( "gMyVar = %d", gMyVar );
    }
  • 函数返回值

    通过函数返回值实现不同函数之间的数据共享。
    
    #include <stdio.h>
    
    int  AddTheseNumbers( int num1, int num2 );
    int main (int argc, const char * argv[]) {
        int    sum;
        sum = AddTheseNumbers( 5, 6 );
        printf( "The sum is %d.", sum );
    return 0; 
    }
    int AddTheseNumbers( int num1, int num2 ) {
    return ( num1 + num2 );
    }
    对于函数返回值为空的函数,可以使用return退出函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值