您的位置:首页 > 编程语言 > C语言/C++

学ios需要了解的C语言基础知识-7-指针和指针与字符串函数

2014-08-27 22:46 633 查看
指针

指针:指针就是地址

    指针变量:用来存放地址的变量就称为指针变量

    定义格式:指针所指向的数据类型 * 指针变量名称

    初始化:

    1、先定义再初始化

       int a = 10;

       int *p;

       p = &a;

     2、定义的同时初始化

       int *p = &a;

  注意点:

  1、没有初始化的指针不可访问它所指向的存储空间,因为它(指针变量)里面是垃圾值,所以它指向是不确定

      1、程序崩溃

      2、访问了不该访问存储空间

  2、不可以把一个常量直接复制指针变量,因为你不知道这个地址编号代表那个存储空间

  3、指针的指向是可以改变

  4、多个指针可以指向同一地址

 

 指针与函数

 1、基本数据类型作为函数参数传递是值传递

 2、指针作为函数参数传递是地址传递(通过指针可以访问它所指向存储空间)

 指针为什么要区分类型(了解)

 1、指针里面存储仅仅是一个字节的地址,如果没有数据类型,那么当使用指针去访问它所指向的存储空间的时候,就不知道要取出多个字节;数据类型就是告诉指针取出多个字节

 2、进行指针运算的时候也需要使用指针所指向的数据类型

 

 指针与数组(了解)

 1、数组像一个指针

    int nums[] = {1,2,3,4,5};

    int *p = nums;

    num[1] == *(num+1) == *(p + 1) == p[1]

    1、我们可以通过访问指针所指向的存储空间的方式去访问数组中元素

       我们也可通过使用数组放其元素的方式,来使用指针访问其元素

 

 2、数组不是一个指针

    1、sizeof(array)!= sizeof(pointer) 

       当把一个数组赋值给一个指针变量,那么我们没有办法通过指针变量来获取数组的长度信息,此时我们称为指针信息遗失

    2、array == &array 数组名就是数组的地址

       pointer != &pointer 指针变量变量里面所存放地址不是指针本身地址

    3、指针的指向是可以改变的,数组的指向的是不可以改变的

 3、指针运算(了解)

    pointer + n 访问pointer后面的第n元素

    pointer - n 访问pointer前面的第n元素

    pointer1 - pointer  两个指针地址之间有多少个元素

 4、多级指针

    二级指针:指针一级指针的指针

    int **pp = &p;

    三级指针:指向二级指针的指针

    int ***ppp = &pp;

指针与字符串函数啥的

1、指针的基本概念

     指针:指针就是地址(内存中字节地址的编号)

     指针变量:存储放地址变量,通常我们指针变量称为指针

     指针作用:

         1、共享数据

         2、以传递地址代替传递值的拷贝

     定义格式:

         指针所指向数据类型 *指针变量名称

     *作用:

     1、在定义变量的时候,它是说明符,说明所定义的变量是一个指针变量

     2、在非定义的变量的时候,它是操作符,访问(读、写)指针所指向的存储空间

     &作用:

      1、作为单目操作符,它是取出变量的地址

   2、指针变量初始化多种方式

      1、先定义在初始化

      int a = 10

      int *p;

      p = &a;

      2、定义同时初始化

      int *p = &a;

   注意点:

      1、指针没有初始化不可以访问它所指向存储空间,因为没有初始化的指针里面是一个垃圾值,此时我们称这个指针是野指针

          1、程序崩溃

          2、访问不该访问存储空间

      2、指针不可以直接赋值一个数值,因为你不知道这个数值代表着内存中那个存储区域

      3、指针的指向是可以改变的

      4、多个指针可以指向同一地址

    

    指针与函数

    1、指针作为函数参数传递是地址传递(只要知道一个变量的地址,无论在哪里都可以访问它的存储空间)

    2、指针作为函数的返回值(指针函数)

       1、局部变量的地址不可以作为函数的返回值

       2、常量的地址可以作为函数的返回值

       3、堆中的地址可以作为函数的返回值

 

    内存分区,从大地址到小地址

    1、栈:用于存放局部变量的,可读可写,系统自动释放存储空间

    2、堆:在C语言中,通过malloc函数开辟的存储空间是在堆里的,手动释放,只要有一个  malloc 就必须对应有一个free,可读可写

    3、全局区:用来存放全局变量的,可读可写

    4、常量区:用来存放常量的,只读的

    5、代码区:用来存放代码的,只读的

 

    函数指针:指向函数的指针

    定义函数指针:

    1、是变量就要有变量名称

    2、是指针就必须有一个 *

    3、如果是函数指针就要把它们用小括号括起来

    4、把函数的左边拷贝它左边

    5、把函数的右边拷贝它右边

    6、形参名称是可以省略的

    int sum(int a,int b);

//

    int (*pointer)(int,int) = sum;

    int result = pointer(10,20);//通常使用是这种方式

    int result = (*pointer)(10,20);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: