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

  • 相关阅读:
    中文分词资源
    软工第二次作业——数独生成器
    软工第一次作业?再次给自己一次定位!
    大一下学期的自我目标,上学期的小总结
    在Mac OS X上安装JavaHL
    在MONO下实现WCF所遇到的问题
    linux下允许root用户远程登录
    CentOS 6.0 安装 MONO 2.10.8
    Linux Vi命令
    CentOS 6.0 编译安装 MySQL 5.5.17
  • 原文地址:https://www.cnblogs.com/wuyuntana/p/14967767.html
Copyright © 2011-2022 走看看