美文网首页
第1周:指针与字符串——1.2 指针运算

第1周:指针与字符串——1.2 指针运算

作者: hyt222 | 来源:发表于2017-06-12 13:49 被阅读0次

    1.指针加1?

    对指针加 1 的动作,意味着要把它移到下一个单元去。它的地址值上加一个 sizeof 那个指针的类型。

    int a[10];  int *p = a;   *(p+1) 指向 a[1]  *(p+n) 指向 a[n]

    如果指针不是指向一片连续分配的空间(如数组),则这种运算没有意义。

    2.指针计算

    两个指针相减得到两个地址之间有几个这样类型的东西在。


    3. *p++

    取出 p 所指的那个数据来,完事之后顺便把 p 移到下一个位置去。

    * 的优先级虽然高,但是没有 ++ 高。

    常用于数组类的连续空间操作。

    4.指针比较

    指向a[0]的指针比指向a[5]的指针小


    5. 0地址

    你的内存中有 0 地址(每个程序都有 0 地址),但是 0 地址通常是个不能随便碰的地址。所以你的指针不应该具有 0 值。

    可以用 0 地址来表示特殊的事情:返回的指针是无效的;指针没有被真正初始化(先初始化为 0)。

    NULL 是一个预先定义的符号,表示 0 地址。(有的编译器不愿意你用 0 来表示地址)。

    6.指针的类型

    无论指向什么类型,所有的指针大小都是一样的,因为都是地址。

    但是指向不同类型的指针是不能互相赋值的(为了避免用错指针)。


    7.指针的类型转换

    void* 表示不知道指向什么东西的指针(计算时与 char* 相同,但不相通)。

    指针也可以转换类型: int *p = &i;   void* q = (void*)p;  这并没有改变 p 所指的变量的类型,而是让后人用不同的眼光通过 q 看它所指的变量。

    8.用指针来做什么

    需要传入较大的数据时用作参数;

    传入数组后对数组做操作;

    函数返回不止一个结果(需要用函数修改不止一个变量);

    动态申请内存。

    9. malloc 和 free

    如果申请失败则返回 0 (NULL)。

    错误用法:    p = &i;   free(p);

    良好的习惯是,有一个指针出来了,先初始化为 0 。void *p = 0; free(p);

    相关文章

      网友评论

          本文标题:第1周:指针与字符串——1.2 指针运算

          本文链接:https://www.haomeiwen.com/subject/vrdkqxtx.html