C 指针

原创 2015年07月08日 21:17:43

主要内容

  • 指针
  • 函数指针
  • 全局变量和函数返回值

指针

  • 什么是指针?
    • 指针就是变量的地址
  • &取地址操作符

    &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退出函数

C和指针代码及答案

  • 2017年11月29日 20:50
  • 566KB
  • 下载

C和指针书籍+课后答案源代码

  • 2017年11月27日 16:41
  • 27.51MB
  • 下载

C/C++函数指针参数不匹配问题

函数指针在C/C++中很常用,最近遇到了一非常有趣的问题,函数指针的参数和函数的形参个数不匹配时会遇到的问题,下面看代码。 // // main.cpp // FuncPointer // // ...
  • oktears
  • oktears
  • 2014年09月21日 15:50
  • 1422

编程语言系列:C和指针

  • 2017年11月25日 19:13
  • 15.71MB
  • 下载

C和指针 中英版

  • 2014年10月03日 15:16
  • 23.65MB
  • 下载

linux C 学习---函数指针

我们经常会听到这样的说法,不懂得函数指针就不是真正的C语言高手。我们不管这句话对与否,但是它都从侧面反应出了函数指针的重要性,所以我们还是有必要掌握对函数指针的使用。先来看看函数指针的定义吧。    ...

C和指针(第二版).rar

  • 2017年06月19日 14:57
  • 27.29MB
  • 下载

C指针(二) - 内存泄露杯具现场及对策

一、未经初始化的内存    指针P申请了10字节的内存空间,但是没有对该内存进行初始化。然后其他代码不小心使用了这块内存,离奇的杯具出现。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C 指针
举报原因:
原因补充:

(最多只允许输入30个字)