【问题标题】:Searching an array and returning a pointer to a single element搜索数组并返回指向单个元素的指针
【发布时间】: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 的对象。迭代一个从未被声明过的容器是相当困难的。
  • 使用&amp;myArray,你会得到一个指向array的指针,而不是指向第一个元素的指针。 &amp;myArray 的类型为int (*)[5],与PointsToArrayint * 类型非常不同。如果你想得到一个指向第一个元素的指针,它的类型为int *,那么使用&amp;myArray[0],或者普通的myArray,因为它会自动转换为&amp;myArray[0]。它是你真正应该拥有的指针。
  • @Yksisarvinen,当然你可以这样迭代。您只需要声明数组大小。例如。 int arr[5];for (auto a : arr) {}

标签: c++ arrays pointers reference iteration


【解决方案1】:

数组的名称是第一个元素的地址,我认为你必须这样写

int* PointsToArray = myArray;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多