C语音基础-指针初识15

来源:互联网 发布:sftp命令 端口 编辑:程序博客网 时间:2024/05/21 22:57

1.什么是指针

    变量的地址就叫做指针指针就是地址.地址就是指针.

2.指针变量

  指针变量就是专门用来存储地址的变量

 2.1指针变量的声明

      数据类型*指针变量的名称;

       *的位置可以与数据类型挨在一起.也可以和指针变量名挨在一起,也可以单独写中间

          int* p1;

          int *p1;

          int * p1;

      批量声明指针变量 int* p1, *p2, *p3;

      指针变量是用来存储另外1个变量的地址.

        但是1个指针变量并不是可以存储任意类型的变量的地址.而是有限定的.

        只能存储和这个指针类型相同的普通变量的地址.

      使用指针间接的操作指针指向的变量.

        *p  *(p+1)

           格式: *指针变量名; 代表这个指针指向的变量.

          int num = 10;

          int* p1 = #

          *p1 代表p1指针指向的变量.也就是num

          *p1 完全等价于 num

          *p1 = 100;

          100赋值给p1指针指向的变量.也就是num变量.

          这个时候可以通过这种方式间接的去为指针指向的变量赋值或者取值.

          *指针变量名; 这个表达式的结果是指针指向的变量.拿到看指针指向的变量.

                      就可以为指针指向的变量赋值或者取值.

        *指针变量就完全代表指针指向的变量.

          所以通过这种方式为指针指向的变量赋值的时候数据类型不同的时候会做自动类型转换.

  2.2 野指针

  

         我们声明1个指针变量,如果没有为其初始化.那么这个时候这个指针变量中是有值的.垃圾值.随机数

         这个时候,这个指针变量就有可能指向了1块随机的空间.

         这块空间有可能无人使用.有可能别的程序在用 有可能系统在用.

         这个时候,去访问指针指向的变量的时候,就会报错. BAD_ACCESS错误.

         像这样的指针我们就叫做野指针.

         NULL.是指针变量的值.

         我们声明1个指针,如果不初始化这个指针.这个指针就是1个野指针就指向了1块随机的空间.

         那么这个时候如果你通过这个指针访问指针指向的随机的空间的时候是相当危险的.

         如果是取值还罢了,如果赋值就相当危险.就可能会造成别的程序崩溃.

         所以,我们建议大家.声明1个指针变量以后,最好为其初始化.

         如果你没有变量的地址初始化给这个指针变量.

         NULL值代表指针变量不指向内存中的任何地址.谁都不指.

         这个NULL完全等价于0. 

         所以,你也可以直接赋值给1个指针变量0

         如果1个指针变量的值是NULL.这个时候通过指针变量去访问指向的变量的时候 100%报错.

3 指针变量的作用

     1. 会使用指针间接的操作指针指向的变量.

     指针的作用:通过指针间接的操作指针指向的变量.

     2. 当函数的参数的类型是int char double float的时候.

     这个时候参数传递是值传递.

     在函数的内部去修改形参变量的值,对实参变量没有丝毫的影响.

    3. 当函数的参数的类型是数组的时候,这个时候参数传递是地址传递.

     在函数内部修改参数数组的元素的时候,其实修改的就是实参数组的元素.

    4. 指针是一种新的数据类型.

     指针可以不可以作为函数的参数呢?

     1).指针完全当然可以作为函数的参数,因为指针也是1个数据类型.

         直接将指针的声明放在小括弧中.

     2).当我们调用1个函数的时候.如果这个函数的参数是1个指针.

         那么我们就必须要为这个指针传递1个和指针类型相同的普通变量的地址.

     3).这个时候,在函数的内部去访问参数指针指向的变量的时候,其实访问的就是实参变量.

    5. 指针作为函数的参数,可以实现什么效果? 

     函数的内部可以修改实参变量的值.

    6. 什么时候需要将指针作为函数的参数?

     1). 遇到的问题.

         函数只能返回1个数据.

         如果函数需要返回多个数据怎么办?

     2). 解决方案.

         使用指针作为函数的参数.让调用者将自己的变量的地址传递到函数的内部

         函数的内部通过指针就可以修改实参变量的值.

     3).当函数需要返回多个数据的时候就可以使用指针作为函数的参数.



原创粉丝点击