C语言运算符——[]下标运算符
在 C 语言中,下标运算符 []
用于访问数组或指针所指向的元素。其基本用法和特性如下:
基本用法
-
数组:
- 数组的下标从 0 开始。例如,
arr[i]
访问数组arr
中第i
个元素。 - 数组名代表数组首元素的地址,可以通过指针算术运算来理解下标运算的工作原理。
int arr[5] = {10, 20, 30, 40, 50}; printf("%d\n", arr[2]); // 输出 30
- 数组的下标从 0 开始。例如,
-
指针:
- 指针使用下标运算符也能访问其指向的内存区域。
ptr[i]
等价于*(ptr + i)
,即访问指针ptr
指向的第i
个元素。
int *ptr = arr; // ptr 指向 arr 的首元素 printf("%d\n", ptr[1]); // 输出 20
- 指针使用下标运算符也能访问其指向的内存区域。
计算方式
下标运算符的计算方式如下:
arr[i]
实际上等同于*(arr + i)
,其中arr
是数组名,表示首元素的地址。- 由于 C 中数组的元素是按类型大小存储的,所以下标运算会乘以每个元素的大小。例如,对于
int
类型的数组,arr[i]
计算为*(arr + i * sizeof(int))
。
注意事项
-
越界访问:访问数组或指针时,超出其定义的范围(如
arr[5]
访问arr[10]
)会导致未定义行为。编译器不会强制检查下标是否越界。 -
负下标:负下标是允许的,但通常会访问未定义的内存区域,也会导致未定义行为。
示例
#include <stdio.h>
int main() {
int arr[5] = {10, 20, 30, 40, 50};
// 使用下标访问数组
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
// 使用指针和下标访问
int *ptr = arr;
for (int i = 0; i < 5; i++) {
printf("ptr[%d] = %d\n", i, ptr[i]);
}
return 0;
}
总结
- 下标运算符在 C 语言中用于访问数组和指针的元素,计算方式基于类型大小。
- 注意避免越界访问,以确保程序的稳定性和正确性。