zoukankan      html  css  js  c++  java
  • C语言和指针-回顾09-指针的运算

    相减:

    两个指针可以相减,相减的结果的类型是ptrdiff_t(这个是一个有符号整数类型)。

    相减的结果:数组元素的长度为单位,而不是以字节为单位。

    两个指针必须都指向同一个数组中的某个元素。

     1 typedef struct {
     2     int a;
     3     int b;
     4     int c;
     5     int d;
     6 } my_struct;
     7 
     8 my_struct my_arrary[2] = {
     9     {1, 2, 3, 4},
    10     {10, 20, 30, 40}
    11 };
    12 
    13 my_struct *my_pointer_1 = &my_arrary[0];
    14 my_struct *my_pointer_2 = &my_arrary[1];
    15 
    16 printf("my_pointer_2 - my_pointer_1 = %d
    ",my_pointer_2 - my_pointer_1);
    17 printf("my_pointer_1 - my_pointer_2 = %d
    ",my_pointer_1 - my_pointer_2);
    18 
    19 Output :
    20 my_pointer_2 - my_pointer_1 = 1
    21 my_pointer_1 - my_pointer_2 = -1

    比较:< , <= , > , >=

    可以比较两个指针,但前提条件是这两个指针都必须指向同一个数组的某个元素 或者 指向数组最后一个元素后面一个内存。

    比如:

    int array[3];

    int *p1 = &array[0];

    int *p2 = p1 + 3;

    int *p3 = p1 - 1;

    p3 < p2:非法

    p2 > p1:合法

    指针+/-整数:

     

    *与++

    1 char array[5] = {0, 1, 2, 3, 4};
    2 char *pointer = &array[0];
    3 
    4 printf("*pointer++ : %d
    ", *pointer++);
    5 printf("*pointer++ : %d
    ", *pointer++);

    第4行的打印是0还是1呢?结果是0 。由于++的优先级高于*,所以很容易搞混结果。

    解释:这个结果是分3步。

      1. ++操作符产生一个pointer的副本
      2. 然后++操作符增加pointer的值
      3. 在pointer的副本上执行间接访问操作

    Output :

    *pointer++ : 0
    *pointer++ : 1

  • 相关阅读:
    Java实现简单的图片浏览器
    ArrayList源码笔记
    JZ12 数值的整数次方算法笔记
    TCP的三次握手与四次挥手学习笔记
    Deepin安装LAMP环境
    Deepin安装Mysql(解决"没有可安装候选"问题)
    流行的Linux系统合集
    Win10超简单安装,菜鸡钊的装机经验分享
    Java入门(七)之面向对象-划重点
    Java入门(六)之常用的类
  • 原文地址:https://www.cnblogs.com/wuyuntana/p/14967767.html
Copyright © 2011-2022 走看看