C++ 数组大小未传递给函数

C++ 数组大小未传递给函数,c++,arrays,size,C++,Arrays,Size,将数组传递给函数并在函数中使用sizeof()时,它只返回单个元素的大小(4)。有办法解决这个问题吗?我仅限于使用数组,而不是向量/模板 void arraysize(int arr[]){ cout << sizeof(arr) << endl; } int main(){ int a[15]; arraysize(a); //4 cout << sizeof(a) << end

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

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

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

您需要继续阅读。

您需要继续阅读。

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

void arraysize(int (&arr)[15]);
使用模板自动推断尺寸:

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


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

void arraysize(int (&arr)[15]);
使用模板自动推断尺寸:

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



问题是函数签名被调整为
void arraysize(int*arr)
,因此
arr
实际上是指向
int
的指针。关于这个主题有很多问题。你不能直接把数组传递给C++中的函数。@ immibIS注意到这是C++。不能按值传递,但可以向数组传递引用/指针。@juachopanza是的,但向数组传递引用/指针并不等于传递数组。@immibis为什么不呢?有人可能会说,通过值传递也不会传递数组。问题是函数签名被调整为
void arraysize(int*arr)
,因此
arr
实际上是指向
int
的指针。关于这个主题有很多问题。你不能直接把数组传递给C++中的函数。@ immibIS注意到这是C++。不能按值传递,但可以向数组传递引用/指针。@juachopanza是的,但向数组传递引用/指针并不等于传递数组。@immibis为什么不呢?有人可能会说,按值传递也不是传递数组。我喜欢这样。但我猜他还不懂模板。我喜欢这个。但我猜他还不懂模板。还有调整。数组衰减并不是OP代码中唯一的事情。首先必须有一个需要数组衰减的上下文。需要数组衰减的上下文是函数调用。请参阅的第一句,因为该函数需要调整指针。如果函数获取的内容不需要指向数组元素的指针,则不会出现衰减。也可以进行调整。数组衰减并不是OP代码中唯一的事情。首先必须有一个需要数组衰减的上下文。需要数组衰减的上下文是函数调用。请参阅的第一句,因为该函数需要调整指针。如果函数获取的内容不需要指向数组元素的指针,则不会出现衰减。
void arraysize(int *arr, int* end);