15 指针

来源:互联网 发布:探险者协会淘宝 编辑:程序博客网 时间:2024/05/16 02:01

指针的重要性:

                          表示一些复杂的数据结构

                          快速的传递数据,减少了内存的耗用

                          使函数返回一个以上的值

                          能够直接访问硬件

                          能够方便的处理字符串

                          是理解面向对象语言中引用的基础

                  总结:指针是C语言的灵魂


指针的定义:

                               地址:

                                      内存单元的编号

                                      从零开始的非负整数

                                      范围:4G【0——4G-1】

                               指针:

                                      指针就是地址,地址就是指针

                                      地址就是内存单元的编号

                                      指针变量是存放地址的变量

                                      指针和指针变量是两个不同的概念

                                      但是要注意,通常我们叙述是会把指针变量简称为指针,实际他们含义并不一样


指针的分类:

              ①  基本类型指针:

                                 见《14 指针热身》

                    例子:#include <stdio.h>

                              int  main (void)

                              {

                                        int i = 5;

                                        int * p;

                                        int * q;

                                        p = & i;

                                   //  *q = p;   //  error,语法编译会出错

                                   //  *q = *p;  //  error

                                        p = q;  //  q是垃圾值,q赋给p,p也变成垃圾值

                                        

                                        printf( " %d\n " , * q );

                                      / *        

                                          q的空间是属于本程序的,所以本程序可以读写q的内容,

                                          但是如果q内部是垃圾值,则本程序不能读写 * q 的内容,

                                          因为此时 * q 所代表的内存单元的控制权限并没有分配给本程序,

                                          所以本程序运行到 printf这一行就会立即出错

                                       * /

         

                                       return 0;

                                }

                    


                               互换两个整数:       

                                              #include <stdio.h>

                                              void huhuan( int * p, int * q )

                                              {

                                                      int t;

                                                      t = * p;

                                                   * p = * q;

                                                   * q = t;                                                    

                                              }


                                              int main(void)

                                           {  

                                              int a = 3;

                                              int b = 5;

                                              huhuan(&a,&b)

                                              printf ( " a = %d, b = %d\n " , a  , b )

                                              return 0;

                                            } 


                       星号 * 的用法:

                                            1.乘法

                                            2.定义指针变量

                                                    int * p;

                                                 //  定义了一个名字叫p的变量,int * 表示p只能存放int变量的地址

                                            3.指针运算符

                                                   该运算符表示放在已经定义好的指针变量的前面

                                                   如果p是一个已经定义好的指针变量

                                                   则 * p 表示     以p的内容为地址的变量

                       如何通过被调函数修改主调函数普通变量的值:

                                            1. 实参必须为该普通变量的地址

                                            2.形参必须为指针变量

                                            3.在呗调函数中通过

                                                           *   形参名 = ............

                                              可以修改主调函数相关变量的值


                        使函数返回一个以上的值,例子:

                                    # include<stdio.h>

                                    void f (int * p,int * q)

                                    {

                                               * p = 1;

                                               * q = 2;

                                      }

                                    int main (void)

                                   {

                                              int a = 3;

                                              int b = 5;n

                                              f ( &a,&b )

                                              printf ( "a = %d,b = %d\", a,b );

                                              return 0;

                                   }

                                      //   其结果为a = 1,b = 2


               ②指针与数组

                        指针和一维数组

                                       一维数组名:

                                                    一维数组名是个指针常量     

                                                    它存放的是一维数组第一个元素的地址

                                                     如           {

                                                                           int a [ 5 ] ;

                                                                           int b [ 5 ] ;

                                                                           a = b ;//  error,a是常量 

                                                                            ........

                                                                     }      

                                                  补充: int ——%d

                                                             long    int—— %ld

                                                             float——%f

                                                             double——%lf

                                                             char——%c   

                                    下标和指针的关系:

                                                   如果p是个指针变量

                                                   则   p[ i ]   永远等价于   * ( p + i )

                                     确定一个一维数组需要几个参数【如果一个函数要处理一个一维数组,则需要接收该数组的哪些信息】:

                                                   需要两个参数:

                                                             数组第一个元素的地址

                                                             数组的长度     

                                     指针变量的运算:  

                                                   指针变量不能相加,不能相乘,也不能相除 

                                                   如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量才可以相减。



                        指针和二维数组

                          

               ③指针与函数

               ④指针与结构体:见17

               ⑤多级指针:见16























0 0
原创粉丝点击