C ++-如何在函数内将数组传递给采用int *类型的函数

时间:2019-02-09 13:11:01

标签: c++ arrays function

我通常在C ++中使用向量,但是在特定情况下,我必须使用我不习惯的数组。如果我这样做:

// GetArraySize.cpp

#include <iostream>

#include <conio.h>   // remove this line if not using Windows

int main(void)
{
  int myArray[] = { 53, 87, 34, 83, 95, 28, 46 };

  auto arraySize = std::end(myArray) - std::begin(myArray);

  std::cout << "arraySize = " << arraySize << "\n\n";

  _getch();    // remove this line if not using Windows

  return(0);
}

这按预期工作(arraySize打印为7)。但是如果我这样做:

// GetArraySizeWithFunc.cpp

#include <iostream>

#include <conio.h>    // remove this line if not using Windows

// function prototypes
int getArraySize(int intArray[]);

int main(void)
{
  int myArray[] = { 53, 87, 34, 83, 95, 28, 46 };

  int arraySize = getArraySize(myArray);

  std::cout << "arraySize = " << arraySize << "\n\n";

  _getch();    // remove this line if not using Windows

  return(0);
}

int getArraySize(int intArray[])
{
  auto arraySize = std::end(intArray) - std::begin(intArray);

  return((int)arraySize);
}

在线auto arraySize = std::end(intArray) - std::begin(intArray);  我收到错误消息:

no instance of overloaded function "std::end" matches the argument list, argument types are: (int *)

我在做什么错了?

我应该提到几件事:

-我知道使用C ++ 17可以使用std::size(myArray),但是在上下文中我不能使用C ++ 17

-可能有其他/更好的方法来编写getArraySize()函数,但是我试图更好地了解如何将旧式数组传入/传出函数

1 个答案:

答案 0 :(得分:2)

自己实施std::size

template <typename T, std::size_t N>
constexpr auto size(const T(&)[N]) {
    return N;
}

用法:

int main() {
    int arr[] = {1, 2, 3};

    std::cout << "size: " << size(arr);
}

请注意,您需要将 reference 传递给数组,因为仅传递T[]实际上会使您将T*传递给数组的第一个元素。这样就不会保留有关数组大小的任何信息。