sizeof用来获取数组元素的个数
时间: 2025-07-11 12:07:20 浏览: 5
`sizeof()` 是 C/C++ 中的一个**运算符(operator)**,用于获取变量或数据类型在内存中所占的字节数。虽然它本身不是专门用来“获取数组元素个数”的函数,但可以通过它计算出静态数组的元素个数。
---
## ✅ 使用 `sizeof()` 获取数组元素个数的原理
```cpp
int arr[] = {1, 2, 3, 4, 5};
int length = sizeof(arr) / sizeof(arr[0]);
```
### 解释:
- `sizeof(arr)`:返回整个数组占用的字节数。
- `sizeof(arr[0])`:返回单个元素占用的字节数。
- 相除后得到的就是数组的元素个数。
### 示例:
```cpp
void setup() {
Serial.begin(9600);
int arr[] = {10, 20, 30, 40, 50};
// 计算数组长度
int length = sizeof(arr) / sizeof(arr[0]);
Serial.print("Number of elements in array: ");
Serial.println(length);
}
void loop() {}
```
### 输出:
```
Number of elements in array: 5
```
---
## ⚠️ 注意事项
### ❌ 不适用于指针传递进来的数组
如果你把数组作为参数传给一个函数,它会退化为指针,此时 `sizeof(arr)` 得到的是指针的大小,而不是数组实际大小。
#### 错误示例:
```cpp
void printLength(int arr[]) {
int length = sizeof(arr) / sizeof(arr[0]);
Serial.println(length); // 输出可能为 1 或 2(取决于平台)
}
void setup() {
int myArr[] = {1, 2, 3, 4, 5};
printLength(myArr); // 错误:arr 已退化为指针
}
```
#### 正确做法:
```cpp
void printLength(int arr[], int len) {
Serial.println(len); // 正确输出数组长度
}
void setup() {
int myArr[] = {1, 2, 3, 4, 5};
int len = sizeof(myArr) / sizeof(myArr[0]);
printLength(myArr, len); // 主动传入长度
}
```
---
## ✅ 支持所有基本类型和自定义结构体数组
```cpp
struct Point {
int x;
int y;
};
void setup() {
Serial.begin(9600);
struct Point points[] = {{1,2}, {3,4}, {5,6}};
int length = sizeof(points) / sizeof(points[0]);
Serial.print("Number of Points: ");
Serial.println(length); // 输出 3
}
```
---
## ✅ 在 Arduino 中的典型应用
- **传感器数据滤波**
- **滑动平均算法**
- **动态控制 LED 灯带**
- **菜单界面显示**
---
##
阅读全文
相关推荐



















