我的问题是,如果你打印出结果*(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;
}
答案 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
希望你画出相关性。
如果这有用的话,如果没有,请在评论中注明,愿意编辑