【问题标题】:Array size not passing to function [duplicate]数组大小未传递给函数[重复]
【发布时间】:2015-04-24 12:40:20
【问题描述】:

当将数组传递给函数并在函数中使用 sizeof() 时,它只返回单个元素的大小 (4)。有没有办法来解决这个问题?而且我仅限于使用数组,而不是向量/模板。

void arraysize(int arr[]){
    cout << sizeof(arr) << endl;
}

int main(){
    int a[15];
    arraysize(a);                  //4
    cout << sizeof(a) << endl;     //60
}

输出:

4
60

【问题讨论】:

  • 问题在于函数签名调整为void arraysize(int* arr),所以arr实际上是指向int的指针。 SO上有很多关于这个主题的问题。
  • 您不能将数组直接传递给 C++ 中的函数。
  • @immibis 请注意,这是 C++。您不能按值传递,但可以将引用/指针传递给数组。
  • @juachopanza 是的,但是将引用/指针传递给数组并不是传递数组。
  • @immibis 为什么不呢?有人可能会争辩说按值传递也不是传递数组。

标签: c++ arrays size


【解决方案1】:

您必须通过引用传递数组以保留大小信息:

void arraysize(int (&arr)[15]);

用模板自动推算大小:

template <std::size_t N>
void arraysize(int (&arr)[N]);

所以没有模板/STL,你必须以某种方式传递尺寸信息:

void arraysize(int *arr, std::size_t size);

void arraysize(int *arr, int* end);

【讨论】:

  • 我喜欢这个。但我猜他还不懂模板。
【解决方案2】:

你需要阅读arraydecay

【讨论】:

  • 也调整。数组衰减并不是 OP 代码中唯一发生的事情。首先必须有一个需要数组衰减的上下文。
  • 需要数组衰减的上下文是函数调用。见lysator.liu.se/c/c-faq/c-2.html#2-4第一句
  • 只是因为函数需要一个指针,由于调整。如果函数采用不需要指向数组元素的指针的东西,则不会衰减。
猜你喜欢
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多