gpt4 book ai didi

c++ - 尝试使用指针迭代数组,但出现浮点指针错误/它无法编译

转载 作者:行者123 更新时间:2023-12-02 18:31:32 26 4
gpt4 key购买 nike

我正在学习指针在 C++ 中的工作原理,并尝试使用指针和令人困惑的指针算术内容来迭代数组。

#include <iostream>

int main()
{
float arr[5] = {1.0, 2.0, 3.5, 3.45, 7.95};
float *ptr1 = arr;
for (int i = 0; i < 5; *ptr1 + 1)
{
std::cout << *ptr1 << std::endl;
}
}

我声明了一个 float 类型的数组叫arr[5] 。然后我初始化一个指针变量*ptr1保存内存地址arr 。我尝试使用 *ptr1+1 迭代它(没有给出错误),但是当我这样做时 std::cout << *ptr1 + 1 << std::endl我收到错误:

operator of * must be a pointer but is of type float

请帮我解决这个问题。

最佳答案

在循环中,每次迭代后,*ptr1 + 1 都会取消引用 ptr1 以读取它当前指向的float,并添加1 到该值,然后丢弃结果。您不会将 ptr1 本身增加 1 来移动到数组中的下一个 float。您可能想使用 ptr1 += 1 而不是 *ptr1 + 1

更重要的是,您没有递增 i,因此循环在 5 次迭代后不会终止。它将永远运行。

代码的其余部分很好(尽管描述它的术语需要一些工作)。

试试这个:

#include <iostream>

int main()
{
float arr[5] = {1.0, 2.0, 3.5, 3.45, 7.95};
float *ptr1 = arr;
for (int i = 0; i < 5; ++i, ++ptr1)
{
std::cout << *ptr1 << std::endl;
}
}

Online Demo

不过,更简单的编写方法是根本不使用手动指针算术,而只需使用普通的数组索引表示法:

#include <iostream>

int main()
{
float arr[5] = {1.0, 2.0, 3.5, 3.45, 7.95};
for (int i = 0; i < 5; ++i)
{
std::cout << arr[i] << std::endl;
}
}

Online Demo

或者更好,使用 range-based for loop相反,让编译器为您完成所有工作:

#include <iostream>

int main()
{
float arr[5] = {1.0, 2.0, 3.5, 3.45, 7.95};
for (float f : arr)
{
std::cout << f << std::endl;
}
}

Online Demo

关于c++ - 尝试使用指针迭代数组,但出现浮点指针错误/它无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69354120/

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