• 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

  • 相关阅读:
    域名恶意指向的问题解决
    dedecms 空间迁移步骤
    PHP 字符串长度计算函数strlen() 正确的计算 中文汉字长度的方法 与mb_strlen()应用
    php模板 smarty
    PHP 中 字符串的 比较函数 strcmp() strcasecmp()
    织梦cms安装完成后登录后台出现空白。主要原因是php版本的问题
    VS2008安装VTk
    英文缩写
    java中native的用法
    On The Way
  • 原文地址:https://www.cnblogs.com/wuyuntana/p/14967767.html
Copyright © 2020-2023  润新知