• 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

  • 相关阅读:
    JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some、for in、for of
    node-express项目的搭建并通过mongoose操作MongoDB实现增删改查分页排序(四)
    Centos下MongoDB数据库的安装以及配置开机自启动(三)
    MongoDB在MacOS上的客户端Robo 3T 的简单使用(二)
    MacOS系统下简单安装以及配置MongoDB数据库(一)
    修改echarts环形图的牵引线及文字位置
    vue 父子组件传值以及方法调用,平行组件之间传值以及方法调用大全
    css加载会造成阻塞吗?
    vue 之 Virtual Dom
    async/await学习笔记
  • 原文地址:https://www.cnblogs.com/foodie-nils/p/13177552.html
Copyright © 2020-2023  润新知