zoukankan      html  css  js  c++  java
  • c语言指针运算

    1.指针加1

      指针加1表示    指针所指向的地址+sizeof(指针所指数据类型)   的地址

      因此,如果将一个数组a的首地址赋值给一个指针p,*(p+n)和a[n]是等价的

      指针除了+外,还可以++、--、+=、-=、-

    2.指针与指针相减

      int p=&a[0];

      int q=&a[6];

      q-p  // 6  指针与指针相减的结果是其地址相减/sizeof(指针所指向的数据类型)

    3. *p++

      ++和*都是单目运算符,但是++的优先级比*高

      *p++表示取p所指的变量的内容之后,将指针+1

    4.指针比较

      <、<=、>、>=、!=、==都可以对指针做比较

      指针大小的比较实质是地址大小的比较

    5.NULL地址

      NULL表示一个预定义的符号,表示0地址

      在程序加载到内存中的时候,有一个逻辑0地址,这个地址是不能被使用甚至不能被读取的,因此可以用0地址/NULL表示空的指针,因而一旦使用空指针,系统会报错

      推荐使用NULL而不是0,因为有的编译器不愿意你用0来表示0地址

    6.指针的类型

      无论指向什么类型的指针,所有指针变量所占据的内存的大小都是一样的(我的64位机上占8个字节),但是指向不同类型的指针之间不能互相赋值,假如将char类型指针q赋值给int类型指针q赋值成功,那么*p=0将使连续的四个内存单元的内容变成0,这显然是不合适的。

    7.指针的类型转换

      最常用的是void*类型指针转换成其他类型

      如:

        int b=3;   

        int * a=(int*)malloc(sizeof(b));

    8.动态内存分配

      C99之前

      int number;

      scanf("%d",&number);

      int *p=(int*)malloc(number*sizeof(int));

      p用完之后记得free(p),假如malloc申请失败,则返回NULL

      C99之后

      int number;

      scanf("%d",&number);

      int p[number];

    9.free函数

      malloc内存用完之后记得一定一定要free()

      int *p=(int*)malloc(1*sizeof(int));

      free(p)    //OK

      int *p=(int*)malloc(1*sizeof(int));

      p++;

      free(p)    //Error    free只能释放申请的首地址,因此释放的时候不能释放改变后的地址

      int *p=NULL;

      free(NULL);  //OK

  • 相关阅读:
    Java 常见异常种类
    Spring3.2+mybatis3.2+Struts2.3整合配置文件大全
    Java中的基本类型和引用类型变量的区别
    【git】Git 提示fatal: remote origin already exists 错误解决办法
    【Java集合】Java中集合(List,Set,Map)
    POJ3322-经典的游戏搜索问题
    程序人生[流程图]
    不使用中间变量交换两个数
    做人要低调,别把自己太当回事
    【转】嵌套子控件设计时支持
  • 原文地址:https://www.cnblogs.com/foodie-nils/p/13177552.html
Copyright © 2011-2022 走看看