介绍

C语言和C++本身不像其它高级语言那样提供简便的获取数组长度的办法,这需要我们自己造轮子,但也不算难,以下是一些方法可以参考。

注意:若数组存放在堆区,则不能用这种方法获取数组长度,数组存放在栈区的可以。

堆区申请的通常是自己创建的,栈区的是系统创建的

方法一:sizeof()

sizeof()用于获取数据类型的大小,而在获取数组长度时,并不能直接sizeof(arr),这样只能获取数组全部数据加起来的大小,

例如一个int型的数组,通过sizeof(int)后可知一个int占4个字节,数组长度为10,若直接sizeof该数组,得到的结果应为4*10=40,显然不符合我们的要求。

但是如果我们能够知道该数组的数据类型又能知道一个数据类型所占的大小还知道该数组的总大小,就可以直接求出该数组的长度,公式为:

因此,有以下代码:

1
2
3
4
5
6
7
#include <stdio.h>

void main(){
int arr[] = {5,1,3,6,8}; // 长度为5
int arrLength = sizeof(arr) / sizeof(arr[0]); // 4*5 / 4 = 5
prnitf("%d", arrLength);
}

以上代码输出结果为5

值得注意的是,sizeof返回值是unsigned long long类型,因此在数据量很大的情况下相除后直接赋值给int有可能会导致超过int的最大大小引发崩溃。

简便之法

通常我们可能需要反复求出数组的长度,但是我们又不想反复编写那一段代码,这时候可以用函数封装,这里使用define预处理器进行封装操作

1
2
3
4
5
6
7
#include <stdio.h>
#define GET_LENGTH(x) (sizeof(x) / sizeof(x[0]))

void main(){
int arr[] = {1,2,3,4,5,6,7,8,9,10};
printf("%d", GET_LENGTH(arr));
}

以上结果输出为 10;

方法二:库函数strlen()

注:只适用于字符串数组!只适用于字符串数组!只适用于字符串数组!

使用方法很简单

strlen(<str-var>);

返回值为int

方法三:while()

可以通过while循环迭代字符,同时变量i自增,如果字符匹配到了\0则终止,并输出i-1的值,其值即为str数组内的元素个数

1
2
3
4
char str[] = {"abcdefg"}
int i = 0;
while(str[i++] != '\0');
printf("%d", i - 1);

以上结果输出为 7