zoukankan      html  css  js  c++  java
  • Linux学习---指针运算、修饰符(const、volatile、typedef)及、运算符(++、--、+、-)

    • const:常量、只读【不能变】

        char *p;

        const char *p;    【T】  字符串内容可以为“hello world”或“aaa”,但只读(不可修改)

        char const *p;

        char * const p;    【T】  一般为硬件资源 ,地址不变,但地址内容可变。

        char *p const;

        const char * const p;    ROM

    • volatile

        防止优化指向内存地址。

       

    • typedef

       

    •  指针加法

      指针的加法、减法运算,实际上加的是一个单位,单位的大小为sizeof(p)

      指针的自增和加一是有区别的:

      eg: int *p;  p+1  //以p为参考位置(p值不变)。

              p++、p--  //地址会更新(p值有变化)。

      eg:  

        int a = 0x12345678;

        int b = 0x99991199;

        int *p1 = &b;

        char *p2 = (char *)&b;

         printf("p1+1 is %x,%x,%x ",*(p1+!),p1[1],*p1+1);    //12345678,12345678,9999119a;

         printf("p2+1 is %x ",p2[1]);      //  11  char型,p2=p[0] = 99(低八位),p[1]为11。

      注: *(p1+1) ===p1[1];    //此时[]为标签,不是数组。

         

    •  指针越界访问。

       ① 使用指针修改const修饰的值。

        eg:

          const int a= 10;
          int b = 20;

          printf("%x ",a);    //a = 14
          printf("%x ",b);    //14  可见连续声明的变量(同类型)二者之间相差为sizeof(int)。对int来说相差为1,即4bit。

          int *p = &b;

          p[1] = 30或*(p+1) = 30;    //该语句编译不报错,但是a输出的值仍是a,具体参考:https://blog.csdn.net/a3125504x/article/details/78835973

          printf("%x",p[1]);  

    • 指针逻辑操作符

        ①跟一个特殊值记性比较  0x0:地址的无效值,结束标志。

          if(p == 0x0)

            NULL

        ②指针必须是同类型的比较才有意义

        

  • 相关阅读:
    数据库系统load飙高问题解决思路
    随Linux开机自动启动mysql
    mysql_safe和mysql_multi
    mysqlslap压测
    “努力就会成功”
    MongonDB 知识
    Linux系统下MongoDB的简单安装与基本操作
    性能压测,更新库存时间长
    Buffer Latch Timeout的解析
    SQL Server 性能调优(一)——从等待状态判断系统资源瓶颈
  • 原文地址:https://www.cnblogs.com/BANLOONG/p/10463328.html
Copyright © 2011-2022 走看看