字符串数组上的C ++ sizeof在传递给函数

时间:2017-12-04 20:27:14

标签: c++ arrays c++11 runtime-error sizeof

尝试动态查找数组的大小。在main()中获取大小可以正常工作,但是当我将它传递给GetSize函数时却没有。

#include <iostream>
#include <string>

using namespace std;

string GetSize(string array[]);

int main()
{
  string array[] = {"A", "B", "C", "D", "E"};
  int ARRAY_SIZE = (sizeof(array) / sizeof(array[0]));

  cout << "Total Size: " << sizeof(array) << endl;
  cout << "Single Element Size: " << sizeof(array[0]) << endl;

  // Pass the array as an argument to GetSize()
  GetSize(array);
}

string GetSize(string array[])
{
  // Get size of the array
  int ARRAY_SIZE = (sizeof(array) / sizeof(array[0]));

  cout << "Size of array is: " << sizeof(array) << endl;
  cout << "Size of 1st element is: " << sizeof(array[0]);    
}

输出

// Total Size: 160
// Single Element Size: 32
// Size of array is: 8
// Size of 1st element is: 32

我不知道为什么总大小和数组大小之间存在差异。

Repl Sandbox: https://repl.it/@phreelyfe/Size-Of-Error

1 个答案:

答案 0 :(得分:0)

怎么样?
template <typename T, std::size_t N>
constexpr std::size_t getArrSize (const T(&)[N])
 { return N; }

我的意思是:不同大小的不同阵列是不同的类型。

所以你必须明确传入参数的大小。

写作时

string GetSize(string array[])

编译器将string array[]视为string * array,因此您将sizeof(array)作为指针(8)的大小。

main()中,sizeof(array)的大小为string[5],因此为160。