使用数组的指针运算
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
希望你能得出相关性。
如果这有很大帮助,如果没有,请在评论中指出,愿意编辑
我的问题是,如果你打印出结果 *(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
希望你能得出相关性。
如果这有很大帮助,如果没有,请在评论中指出,愿意编辑