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

指针
指针:指针就是地址
    指针变量:用来存放地址的变量就称为指针变量
    定义格式:指针所指向的数据类型 * 指针变量名称
    初始化:
    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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值