使用数组的指针运算

Pointer Arithmetic using arrays

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

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

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

ary 衰减到您发布的表达式中的指针。由于它总是产生相同的地址(第一个元素),因此 *ary 将在每次迭代时计算为 7

既然你明白 *(ary + i) 等同于 ary[i],你现在应该知道你的循环体类似于:

ary[i] = 7 + i;

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

希望你能得出相关性。

如果这有很大帮助,如果没有,请在评论中指出,愿意编辑