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. 指针与一个整数的加法已经说过了

     

     

  • 相关阅读:
    交叉熵损失函数
    均方根误差(RMSE),平均绝对误差(MAE),标准差(Standard Deviation)
    【转载】【矩阵,数组,列表之间相互转化】
    【数据集介绍】【Point04】
    【视频处理知识】
    【IOU】
    【模型训练】
    【图片操作】
    python 写 XML 文件
    【数组操作】 创建、排序
  • 原文地址:https://www.cnblogs.com/liyongmou/p/1996380.html
Copyright © 2011-2022 走看看