C++ 获取数组长度

C++ 获取数组长度

1 字符串数组

对于字符串数组,使用strlen()函数来获取字符串数组的长度。

char a1[] = "fwegweasdasdwqew";
cout << strlen(a1) << endl;

2 数字数组

例如: int arr[] = { 1,5,9,10,9,2 }; 可以用sizeof(a)/sizeof(a[0])来获取数组的长度。

原理:sizeof()函数可以返回数组所占的内存,而sizeof(a[0])返回的是数组第一个元素所占的内存。

所以式子:**sizeof(a)/sizeof(a[0])**得到的就是数组的个元素个数,也就是数组的长度。

举例说明:

#include<iostream>
using namespace std;

template<class T>

int length(T& arr)
{
    //cout << sizeof(arr[0]) << endl;
    //cout << sizeof(arr) << endl;
    return sizeof(arr) / sizeof(arr[0]);
}

int main()
{
    int arr[] = { 1,5,9,10,9,2 };
    // 方法一
    cout << "数组的长度为:" << length(arr) << endl;
    // 方法二
    //cout << end(arr) << endl;
    //cout << begin(arr) << endl;
    cout << "数组的长度为:" << end(arr)-begin(arr) << endl;
    system("pause");
    return 0;
}

在这里插入图片描述
注意:

1 在C++中,如果要多次获取不同数组的长度,为了避免重复写代码,可以定义一个求数组长度的模板。

template <class T>
int getlength(T& array)
{
 	return (sizeof(array) / sizeof(array[0]));
}

2 数组的传递形式:

#include<iostream>
using namespace std;

int GetSize(int data[]) {
    return sizeof(data);
}
int main() {
    int data1[] = {1,2,3,4,5};
    int size1 = sizeof(data1);

    int *data2 = data1;
    int size2 = sizeof(data2);
    
    int size3 = GetSize(data1);
    
    cout<<size1<<" "<<size2<<" "<<size3<<endl;
    return 0;

}

数组作为函数参数传递的时候,传递的是指针,所以不能正确的求出子函数中传递进去的数组的长度,切记。
详细的可以看我的另一篇博客:C++中数组作为函数参数的注意问题