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