数组的长度我们可以直接根据函数声明得到数组的长度,或者可以通过计算的方法如下:
数组长度=sizeof(数组名)/sizeof(数组类型)
测试代码如下:测试int整形数组,char字符数组,字符串数组,结构体数组。
#include <stdio.h>
int main()
{
int length =0;
//1 整形
int arr[] = {1, 2, 3, 4, 5};
length= sizeof(arr) / sizeof(int);
printf("array length=%d\n",length);
//2 char字符数组
char arry2[]={'1','a','3','b'};
length = sizeof(arry2) / sizeof(char);
printf("array2 length=%d\n",length);
//3 字符串
char *arry3[]={"123","11111","aaaa"};
length = sizeof(arry3) / sizeof(char *);
printf("array3 length=%d\n",length);
//4 结构体数组
struct haha
{
char *name;
int age;
};
struct haha arryHaha[]={
{
.name="name0",
.age=0
},
{
.name="name1",
.age=1
},
{
.name="name2",
.age=2
},
{
.name="name3",
.age=3
},
{
.name="name4",
.age=4
},
{
.name="name5",
.age=5
}
};
length = sizeof(arryHaha) / sizeof(struct haha);
printf("arryHaha length=%d\n",length);
return 0;
}
测试结果:
注意:在函数调用中,如果将数组作为参数传递给函数,那么在函数内部无法直接计算出数组的长度。因为在函数内部,数组名实际上是一个指向数组首元素的指针,所以sizeof运算符返回的是指针的大小,而不是数组的大小。因此,需要在函数外部先计算出数组的长度,然后将其作为参数传递给函数。例如:
#include <stdio.h>
void testLength(int *arr, int length)
{
printf("Test: array length %d\n", length);
}
void testLen(int *arr)
{
printf("Test: array length %ld\n", sizeof(arr) / sizeof(int));
}
int main()
{
int arr[] = {11, 12, 13, 14, 15};
int length = sizeof(arr) / sizeof(int);
testLength(arr, length);
testLen(arr);
return 0;
}
欢迎关注公众号:嵌入式学习与实践