Linux下定义和使用一维数组需区分C语言与Bash Shell:C语言中数组为编译时定长、类型统一的连续内存块,格式为“数据类型 数组名[常量元素个数]”,下标从0开始,支持全部/部分/省略长度初始化;Shell中数组用括号定义、无需预设大小、下标从0起、支持动态索引和@/*通配取值。

Linux 下定义和使用一维数组,要分清楚是 C 语言程序 还是 Bash Shell 脚本 ——两者语法完全不同,不能混用。
C语言中定义和使用一维数组
在 C 程序(如用 gcc 编译)里,数组是编译时确定大小的连续内存块,所有元素类型必须一致:
-
定义格式:数据类型 数组名[元素个数];
例如:int scores[5];、char name[20];、float temps[100]; -
元素个数必须是常量表达式:可以是整型常量、宏定义(
#define N 10)、或 C99 起支持的变量长度数组(VLA),但初学建议只用常量,如int arr[8]; -
下标从 0 开始:5 个元素的数组,合法下标是
0到4;访问arr[5]属于越界,行为未定义 -
初始化方式:
- 全部赋值:
int a[3] = {1, 2, 3}; - 部分赋值:
int b[5] = {10, 20};→ 后三个自动为 0 - 省略长度:
int c[] = {5, 15, 25};→ 编译器推断长度为 3 - 全零初始化(常用):
int d[100] = {0};
- 全部赋值:
-
访问与遍历:用
数组名[下标],常配合 for 循环:for (int i = 0; i <br><code>for (int i = 0; i
Bash Shell 中定义和使用一维数组
Shell 数组是运行时动态构建的,更灵活,但仅限于字符串(数字也按字符串存):
-
定义方式(推荐括号赋值):
fruits=("apple" "banana" "cherry")
也可逐个赋值:colors[0]="red"; colors[1]="blue" -
访问单个元素:用
${数组名[索引]},如${fruits[1]}输出banana;注意花括号不可省 -
获取数组长度:
${#fruits[@]}或${#fruits[*]},返回元素个数 -
获取所有元素:
${fruits[@]}(安全,保留空格)或${fruits[*]}(合并成一个字符串) -
遍历数组:
for item in "${fruits[@]}"; do echo "$item"; done
双引号包裹"${fruits[@]}"可正确处理含空格的元素
常见误区提醒
别把两种环境搞混:
- 在终端直接敲
arr[0]=1是 Bash 语法,gcc编译会报错 - 在 C 程序里写
int a[] = (1,2,3);或a[0] = "hello";是非法的 - C 数组名是地址常量,不能赋值(如
a = b;错误);Shell 数组名可整体重新赋值 - Shell 不检查越界,访问未定义索引(如
${arr[100]})只返回空,不报错
小技巧:快速验证
Shell 中试试:nums=(10 20 30); echo ${nums[0]}; echo ${#nums[@]}
C 中写个最小可运行文件:int a[3]={1,2,3}; printf("%d\n", a[1]);,保存为 test.c,再 gcc test.c && ./a.out


















