zoukankan      html  css  js  c++  java
  • 指针算数 yongmou

    指针算数

     

    首先给出一个例子

    int a[] = {0, 1, 2, 3, 4};

    int *ptr = (int *)((&a) + 1);

    printf("%d", *(ptr -1));

    输出是什么?

    正确答案是数组a最后一个元素,也就是4

    如果你能够解释这是爲什么,那么就没有必要看下去了。

     

    下面,我们来看一下常见的指针算数

     

    T apple;

    T *p = &apple;

    这是一个指针的声明,T表示一个类型。

    p是一个变量,其值为一个内存地址,T给出了如何对这个地址进行解引用。比如int型,就是说4个字节的内存的二进制补码。

     

      1. 指针与一个整数n相加

        p + n的值是 p的值 + n * sizeof(*p)

      2. 同一类型的两个指针可以进行减法,运算结果是参与运算的两个指针之间的元素个数(而不是他们之间的字节数)

        运算结果可正可负

      3. 其它运算均不可以

     

    回到一开始给出的例子,我有两个地方要说的:

    1. a&a值相同,因爲不需要再有一个变量来存储数组名,数组名可以在编译时确定的。与之对应,*ptrptr值也相同。由此可见,指针的解引用并不都是直接去取指针值所标识的那块地址的内容。

     

    2. 指针与一个整数的加法已经说过了

     

     

  • 相关阅读:
    jsp页面间传递参数 中文乱码问题(zz)
    java 生成xml
    java dom4j 解析xml
    生成不重复的32为随机码
    [HYSBZ
    七夕祭
    [CF741D] Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
    Baltic2014 sequence
    [洛谷P2459] SDOI2011 消耗战
    [洛谷P4172] WC2006 水管局长
  • 原文地址:https://www.cnblogs.com/liyongmou/p/1996380.html
Copyright © 2011-2022 走看看