0428 指针

字符型数组和字符串的传参:
    char str[32] = {"hello world"};

    int fun(char *pstr);

    字符串遍历:
        while (str[i] != '\0')
        {
            i++;
        }

        while (*p != '\0')
        {
            p++;
        }


2.二级指针:
    指向一级指针变量的指针

    int *p;
    char *p;
    double *p;
    int **p;

3.void *指针:
    用来保存地址

    void *p;                    //所有指针都是8个字节

    void * -> int *、char *、double * 不需要强制类型转换
    int *、char *、double * -> void * 需要强制类型转换

    void * 作为函数参数,可以传入char *、double *、int *的指针,实现一个函数原型下的不同类型指针的传参

4.const指针:
    const == readonly

    1.const int *p;
    2.int const *p;
    3.int *const p;
    4.const int *const p;
    5.int const *const p; 

    1和2是等价的
    const 修饰 *p, p可以改变, *p不能改变
    只能使用指针指向的空间数据,不能修改此数据

    3
    const 修饰 p, p不可以改变, *p可以改变,一定要初始化,否则该指针为野指针
    永远指向某个空间的指针(比如数组的数组名)

    4和5是等价的
    const 修饰p *p, p不可以改变, *p不可以改变,一定要初始化

5.数组指针和指针数组:
    1.数组指针:
     数组指针是指针,指针指向整个数组

     数组指针:对一维数组名&,值不变,类型升级为指向整个数组的数组指针
             对数组指针*,值不变,类型降级称为指向数组第一个元素的指针
     int a[5] = {1, 2, 3, 4, 5};

     a可以理解为int * 
     注意:
        在以下两种情况下a不能理解为int *型 
        1.sizeof操作
        2.&操作
            &int *  ==   int ** 
            &a      ==   int (*)[5]

    2.指针数组:
     指针数组是数组,数组的每个元素都是指针
     int *a[5]:定义一个数组,数组名为a,有5个元素,每个元素为int*型

     char *pstr[5];   

     存放字符串数组用二维数组
     操作字符串数组用指针数组
 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值