温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言指针的概念及用法

发布时间:2021-08-26 18:19:29 来源:亿速云 阅读:170 作者:chen 栏目:开发技术

这篇文章主要讲解了“C语言指针的概念及用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言指针的概念及用法”吧!

目录
  • 一、概念

    • 1.*指针

    • 2.&取址

  • 二、指针修饰符

    • 1.const 常量指针

    • 2.volatile 特征指针

    • 3.typedef 别名指针

  • 三、指针运算

    • 1. ++ -- + -

    • 2.[] 标签访问

  • 四、指针逻辑操作

    一、概念

    1.*指针

    指针: 内存资源的地址指针
    变量:存放指针的盒子 32位操作系统中,其大小位32bit,即4个字节,64位为64bit,即8个字节,与指针数据类型无关
    指针的数据类型: 表示指针要读取的地址字节数,如:char *p;读取1个字节,int *p读取4个字节,具体选择根据指向的变量调整
    指针指向的内存空间一定要合法(存在,且有读的权限)

    int main()
    {
        int *p1;
        char *p2;
        //p1:4,p2:1 
        printf("p1:%lu,p2:%lu \n",sizeof(*p1),sizeof(*p2));
        return 0;
    }

    指针变量的写法:*p_xx
    指针变量通常以*p_开头,是英文指针Pointer的首字母

    2.&取址

    &a 变量a的内存地址

    int main()
    {
        int a = 12312312;
        int *p1;
        p1 = &a;
        //*p1指针指向变量的值:12312312,p1指向的内存地址E9C4AE18(等价于&a)
           printf("*p1:%d,p1指向的内存地址%X",*p1,p1);
        return 0;
    }

    二、指针修饰符

    1.const 常量指针

    const char *p; 从右往左理解: *p指针 char指向1个字节的内容 const该字节内容为只读 场景:描述字符串
    char *const p; 从右往左理解:*p指针 const指针方向为只读(无法切换) char指向的内容是1字节,内容允许修改 场景:硬件资源
    const char *const p; 结合了上面1和2的限制,指针方向为只读,指向的内容为只读 场景:ROM设备

    //以下两个写法的作用是一样的
    const char *p;
    char const *p;
    //以下两个写法的作用是一样的
    char *const p;
    char *p const;

    2.volatile 特征指针

    volatile char *p;防止优化指向内存地址(阻止指令重排)

    3.typedef 别名指针

    为指针起别名,复杂的指针场景使用,提高代码可读性
    typedef char *xx_p

    三、指针运算

    1. ++ -- + -

    指针的运算都是指向地址的运算,最小单位为当前指针变量的数据类型所占的内存大小
    如:p+1的效果为0x20+1*(sizeof(p))

    2.[] 标签访问

    指针指向的内存位置,标签默认为0,及:p[0]
    标签访问一般用于非线性访问,如:访问当前指针指向内存位置的后边第二个位置p[2]效果为*(p+2)
    使用标签访问,则取出的是标签内存里的值,而不是地址
    C语言的标签化默认是允许越界的,甚至用标签扫描整个内存,修改不同应用的属性

    int main()
    {
        int a = 0x123;
        int a1 = 0x134;
        int a2 = 0x145;
        int *p;
        p = &a1;
        //*p:134 ,*(p-1):145 ,p[-1]:145,p[1]:123 
        printf("*p:%X ,*(p-1):%X ,p[-1]:%X,p[1]:%X \n",*p,*(p-1),p[-1],p[1]);
        return 0;
    }

    四、指针逻辑操作

    >= == <= != 指针可以做逻辑操作,比较大小,但实际运用的比较少
    p1 > p2 指针所占的地址比较,意义不大
    p1 == n 一般跟一个特殊值比较,比如p1 == 0x0,地址的无效值,结束标识,表示p1处理完了
    *p1 > *p2 实际上是指向变量值的比较

    注意:
    指针必须是同类型比较才有意义

    感谢各位的阅读,以上就是“C语言指针的概念及用法”的内容了,经过本文的学习后,相信大家对C语言指针的概念及用法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI