gpt4 book ai didi

c++ - 为什么在 C++ 中,我不需要取消引用指向数组的指针来访问数组中的项

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:59 25 4
gpt4 key购买 nike

我目前正在学习指针。当我创建一个指向 int 类型数组的指针时,我发现我可以直接索引指针而不引用指针,并且编译器仍然输出我数组中的精确项。我不明白为什么这样行得通,以及为什么我们不需要首先尊重指针。

没有解引用的代码

int arraySize = 5;
int* theArray = new int[arraySize];

for(int i = 0; i < 5; i++)
{
theArray[i] = i;
}

for (int i = 0; I < 5; i++)
{
std::cout << theArray[i] << std::endl;
}

这给了我输出

Output without derefercing

但是,当我这样写的时候:

for (int i = 0; i < 5; i++)
{
(*theArray)[i] = i;
}

我的编译器说:错误:表达式必须具有指向对象的指针类型。 (我使用的是 Visual Studio 2013。)

如有任何帮助,我们将不胜感激。

最佳答案

Code that without dereference

[ code ]

这是不正确的。你肯定是在取消引用你的指针:

 theArray[i] = i;

这是指针解引用。 [] 运算符取消引用指针。这相当于:

 *(theArray+i) = i;

如您所知,向指针添加或减去一个值会使指针前进或减少,产生一个新的指针值,然后指针被解除引用。

还有:

 *p = q;

相当于

 p[0] = q;

[] 运算符只是向指针添加偏移量并使用 * 运算符取消引用结果指针的简写。最终结果完全一样。

关于c++ - 为什么在 C++ 中,我不需要取消引用指向数组的指针来访问数组中的项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40558977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com