数组到指针的转换.如何在C++中找到数组的大小

Array to pointer conversion. How to find the size of array in C++?

本文关键字:数组 C++ 指针 转换      更新时间:2023-10-16

我正试图找出数组的大小。但与其给它5分,不如给它2分。这是不对的。查找数组大小的公式如下。int size = sizeof(pArr)/sizeof(int);您可以在此处查看工作代码。为了方便起见,代码如下所示。

#include <iostream>
void printArray(int* pArr){
    //find size of the array. It should be 5 but 
    //below it is calculating it 2. Why?
    int size = sizeof(pArr)/sizeof(int);
    std::cout << "sizeof pArr: " << size << "n";
    for(int i=0; i<size; i++){
        std::cout << *(pArr+i);
    }
}
int main(){
    int another[] = {1,2,3,4,5};    
    printArray(another);
    for(int j=0; j<5; j++){
    // std::cout << arr[j]<< "n ";   
    }//end for
}//end main

没有。一旦数组到指针的转换发生,大小信息就消失了。如果您需要它,您必须将大小作为一个单独的参数传递。

由于pArr是指针,因此sizeof(pArr)给出了指针的大小。您的指针大小似乎是int的两倍;例如,x86-64就是这样。

保留大小的一种选择是将处理函数转换为基于数组大小参数化的函数模板:

template <std::size_t N>
void printArray(int (&arr)[N])
{
  for (std::size_t i = 0; i < N; ++i) {
    std::cout << arr[i];
  }
}

请注意,这意味着您通常需要在头文件中实现模板,并且您将为每个调用它的数组大小获得一个实例化。而且它只能用实际的C样式数组调用。