【发布时间】:2019-05-27 15:06:13
【问题描述】:
我正在尝试编写一些函数来处理 C++ 数组(出于此分配的目的,我不允许使用 std::vector - 只能使用 iostream、算法、字符串和数组)。
但是,当我运行此代码时,我收到两条错误消息。
in.cpp:15:25: error: cannot convert ‘int ()[5]’ to ‘int’ in initialization int* PointsToArray = &myArray;
当我尝试初始化指向 myArray 的指针时会发生这种情况。我想我的指针/引用声明语法一定有问题,但是我尝试了“int *PointsToArray”和“int * PointsToArray”以及星号周围的各种其他间距方式,但我不知道出了什么问题.
另一个是这个。
main.cpp:22:15: 错误:“arr”、“begin”、“end”未在此范围内声明 for(int i : arr)
我借用了 for(int i : arr) 语法来遍历 here 中包含未知数量元素的数组。在我添加了 searchPointer() 函数之前,循环运行良好;然后它抛出了这个错误信息。
我的代码如下,请帮忙。
#include <iostream>
#include <array>
using namespace std;
int searchArray(int array[], int targetInt);
//Iterates through an array & returns index of an element identical to target
int* searchPointer(int* arr, int targetInt);
//Returns a pointer to an element that matches the target
int main() {
int targetInt = 4;
int myArray[5] = {1, 2, 3, 4, 5};
int* PointsToArray = &myArray;
searchArray(myArray, targetInt);
searchPointer(PointsToArray, targetInt);
}
int searchArray(int array[], int targetInt) {
for(int i : arr) {
if (i == targetInt) {
int* x = find (std::begin(arr), std::end(arr), targetInt);
cout << "Your target " << targetInt << " found at index " << x << "\n";
}
}
return 0;
}
int* searchPointer(int* arr, int targetInt) {
for (int i : arr) {
if (i == targetInt) {
std::cout << "Target located at " << &targetInt << " in memory\n";
}
}
}
【问题讨论】:
-
不是星号。这是与号。它不属于那里。
-
第二个问题:变量在
searchArray中被声明为array而不是arr。 -
另外,仅仅因为你看到了一些其他代码“
for(int i : arr)”并不意味着你可以盲目地将它复制粘贴到你自己的代码中间,它会起作用。您的第一个问题是您没有声明任何名为arr的对象。迭代一个从未被声明过的容器是相当困难的。 -
使用
&myArray,你会得到一个指向array的指针,而不是指向第一个元素的指针。&myArray的类型为int (*)[5],与PointsToArray的int *类型非常不同。如果你想得到一个指向第一个元素的指针,它的类型为int *,那么使用&myArray[0],或者普通的myArray,因为它会自动转换为&myArray[0]。它是你真正应该拥有的指针。 -
@Yksisarvinen,当然你可以这样迭代。您只需要声明数组大小。例如。
int arr[5];for (auto a : arr) {}
标签: c++ arrays pointers reference iteration