我正在尝试一些非常简单的东西,本来应该很简单,但它以某种方式困扰着我......
我试图了解 ++ 在被视为指针时对数组的影响,以及在被视为数组时对指针的影响。
所以,
int main()
{
int a[4] = { 1, 4, 7, 9 };
*a = 3;
*(a+1) = 4;
*++a = 4; //compiler error
}
1:所以在*(a+1)=4
我们设置 a[1]=4; //快乐但是什么时候*++a = 4;
,我希望指针 a 增加一,因为 ++ 是 * 的先例,然后 * 开始,我们使它等于 4。但是这段代码不起作用......为什么会这样?
另一个问题:
int main()
{
int* p = (int *)malloc(8);
*p = 5;
printf("%d", p[0]);
*++p = 9; //now this works!
printf("%d", p[1]); //garbage
printf("%d", p[0]); //prints 9
}
2:现在 *++p = 9;工作正常,但它的行为并不像数组。两者有何不同?这只是增加 p,使其等于 9。如果我打印 p[0],它现在打印 9,我看到虽然不能再通过 p[0] 访问它,*(p-1) 显示 5还在那里。那么用[0]索引一个指针,它到底指向哪里呢?发生了什么变化?
非常感谢各位专家!