使用数组的指针算术

时间:2017-11-02 06:53:39

标签: c++ pointers pointer-arithmetic

我的问题是,如果你打印出结果*(ary + i),我知道这是另一种说ary [i]值的方法,那么下面的输出是十六进制/垃圾数据还是那个特定的索引根据* ary + i计算的结果分配一个新值?整个指针的东西仍然让我失望。

  int ary[] = [7, 5, 3, 1, 2, 4, 6, 8];

  for (int i = 0; i < 8; i++)
        {
            *(ary + i) = *ary + i;
        }

2 个答案:

答案 0 :(得分:2)

ary衰减到您发布的表达式中的指针。由于它始终生成相同的地址(第一个元素),*ary将在每次迭代时评估为7

由于您了解*(ary + i)等同于ary[i],因此您现在应该认为您的循环体类似于此:

ary[i] = 7 + i;

答案 1 :(得分:-1)

int ary[] = [7, 5, 3, 1, 2, 4, 6, 8]; 错误的分配方法,

必须使用{ }为数组赋值。

因此,正确的定义方式是: int ary[] = {7, 5, 3, 1, 2, 4, 6, 8};

此处*(ary + i) 等效ary [i]*ary + i 等效ary [0] + i

解决你的问题,没有它不会抛出十六进制或垃圾,你有取消引用一个指针,所以它将提供存储在该位置的数据。

代码:

#include <iostream>

 int main ()
  {
      int ary[] = {7, 5, 3, 1, 2, 4, 6, 8};
      for (int i = 0; i < 8; i++)
      { 
          *(ary + i) = *ary + i; 
      }

      for (int j=0;j <8;j++)
      {
          std::cout <<ary [j];
       }
    }

输出:

7891011121314

希望你画出相关性。

如果这有用的话,如果没有,请在评论中注明,愿意编辑