C 语言中获取数组长度的函数104


在 C 语言中,数组是一种连续内存块,用于存储相同数据类型的多个元素。数组的大小在编译时固定,并且在程序执行期间无法被更改。

为了确定数组的长度,C 语言提供了几个函数,包括:## 1. sizeof 运算符

sizeof 运算符返回给定数据类型的字节大小。对于数组,它返回数组中所有元素的总字节数。以下示例说明了如何使用 sizeof 运算符获取数组长度:```c
#include
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Array length: %d", size);
return 0;
}
```
输出:
```
Array length: 5
```

在此示例中,arr 是一个包含 5 个整数的数组。sizeof(arr) 返回数组的总字节数,而 sizeof(arr[0]) 返回单个元素的字节数。除以这两个值得到数组长度为 5。## 2. _Generic 宏

_Generic 宏是一个 C11 特性,它允许您编写泛型代码,该代码可以根据表达式的数据类型进行不同的计算。以下示例说明了如何使用 _Generic 获取数组长度:```c
#include
#define ARRAY_LENGTH(_arr) _Generic((_arr), int *: (sizeof(_arr) / sizeof((_arr)[0])), \
double *: (sizeof(_arr) / sizeof((_arr)[0])), \
float *: (sizeof(_arr) / sizeof((_arr)[0])) \
)
int main()
{
int arr1[] = {1, 2, 3, 4, 5};
double arr2[] = {1.2, 2.3, 3.4, 4.5, 5.6};
float arr3[] = {1.1, 2.2, 3.3, 4.4, 5.5};
printf("Array 1 length: %d", ARRAY_LENGTH(arr1));
printf("Array 2 length: %d", ARRAY_LENGTH(arr2));
printf("Array 3 length: %d", ARRAY_LENGTH(arr3));
return 0;
}
```
输出:
```
Array 1 length: 5
Array 2 length: 5
Array 3 length: 5
```

在此示例中,ARRAY_LENGTH 宏接受数组作为参数,并根据其类型计算长度。它使用 sizeof 运算符和除法来确定元素的数量。## 3. 自定义函数

您还可以创建自己的自定义函数来获取数组长度。以下示例显示了如何创建这样的函数:```c
#include
int array_length(int *arr)
{
int count = 0;
while (*arr != '\0')
{
count++;
arr++;
}
return count;
}
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int length = array_length(arr);
printf("Array length: %d", length);
return 0;
}
```
输出:
```
Array length: 5
```

此函数使用循环来遍历数组并计算元素的数量。它返回元素的数量作为数组长度。## 注意事项
* sizeof 运算符仅适用于已声明大小的数组。对于可变大小数组,它返回 0。
* _Generic 宏需要 C11 编译器或更高版本。
* 自定義函數需要知道數組的類型才能正確運作。

2024-12-01


上一篇:C 语言中获取和输出地址值的函数

下一篇:C 语言字符串转换函数