代码之家  ›  专栏  ›  技术社区  ›  73memedream

使用数组的指针算法

  •  1
  • 73memedream  · 技术社区  · 7 年前

    我的问题是,如果你打印出结果*(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 回复  |  直到 7 年前
        1
  •  2
  •   StoryTeller - Unslander Monica    7 年前

    ary 衰减为您发布的表达式中的指针。由于它总是产生相同的地址(第一个元素), *ary 将评估为 7

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

    ary[i] = 7 + i;
    
        2
  •  -1
  •   Vedant    7 年前

    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
    

    希望你能得出相关性。

    如果这很有帮助,如果没有帮助,请在评论中注明,并愿意编辑