C语言学习day11

一.指针
    简化程序逻辑,提高程序灵活性
    指针可以直接操作内存
    1.指针概念
        地址:
            用来区分内存中不同字节的地址编号
        指针:
            指针的值是一个地址编号,具有指向性,描述连续空间的起始位置
            指针的类型是描述连续空间的大小
            指向性:
                指向以自身地址编号开始的自身字节大小的连续空间
        指针变量:
            用来保存指针类型数据的变量
            变量的值:
                是指向另外一段内存空间起始地址的地址编号
    2.&取地址运算符
        获取一个指向操作数变量类型的指针
        数据类型        对应的指针
        int        ----    int *
        char    ----    char *
        float    ----    float *
        int *    ----    int **
    3.*指针运算符
        指针运算符只能操作指针
        int *p = &a        等价于 *p = a
        &运算符具有类型升级作用,*具有类型降级作用
    3.指针变量
        定义:
            数据类型 *变量名
            数据类型:指针变量所指向的空间数据类型
            有值:指向另外一段内存空间的起始地址编号
            有空间:保存自身变量的值得空间
            32位操作系统下,指针变量占据4B;64位操作系统下,指针变量占据8B
        初始化:
            int *p = NULL
            野指针:指针指向无效非法空间
        操作:
            直接访问:p
                操作指针变量自身空间
            间接访问:*p
                操作指针变量指向的空间
    4.指针的运算
        加法:
            p + N     //指针向高地址偏移N倍个自身指向数据类型字节的空间
            p + p    //无特定含义
        减法:
            p - N     //指针向低地址偏移N倍个自身指向数据类型字节的空间
            p - p    //同种类型下,两指针地址偏移量所包含的指针指向数据类型的个数
        自加
            p++,++p    //指针向高地址偏移自身指向数据类型字节的空间
        自减
            p--,--p    //指针向低地址偏移自身指向数据类型字节的空间
    5.指针和数组的关系
        数组的数组名实质上是指向数组首元素地址的指针
        数组后的[]可以认为是对数组进行了类型升级,即进行了指针运算
            int *p = arry;
            则四者等价:arry[n] = *(arry + n) = *(p + n) = p[n];
        特殊情况:
            在进行sizeof运算时,数组的数组名代表数组
            &arry在对数组名进行取地址运算时,数组的数组名代表数组
    5.指针和字符型数组的关系
        char str[32];
            //其中的内容有两份,分别在栈帧和字符串常量区,栈帧区内容可以被修改
        char *pstr;
            //仅存在于字符串常量区,其中内容不可被修改

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值