【C 语言初级】数组

在上个系列【C 语言入门】里面,已经对数组和指针定义和使用做了初步的了解。在本文章中,将深入探索:如何在 C 语言中,如何使用数组来处理相同类型的批量数据。

数组概述

定义:数组是具有相同数据类型,并且按照一定顺序排列的一组变量的集合。

特征

  • 有序性:数组元素之间具有固定的先后顺序
  • 可索引:通过数组名和下标可以唯一地确定数组中的元素

一维数组

一维数组的定义

类型名 数组名[常量表达式]

NOTE

  • 数组名的命名遵循《C 语言标识符的命名规则》
    • 标识符由字母、数字和下划线组成
    • 第一个字母不能是数字,只能是字母或下划线
    • 区分大小写:大写字母和小写字母不同
    • C 语言规定了一个标识符的字符个数。C 语言规定标识符的最大长度可达 255 个字符,只有前 32 个字符在编译时有效。
  • 在定义数组时,需要指定数组元素的个数,即数组长度。方括号 [ ] 中的常量表达式用于表示数组元素的个数。

Example 1:使用常量表达式指定数组长度

// 定义了一个 int 型的数组,数组长度为 4,具有 4 个数组元素
int a[4];

// 数组下标是从 0 开始
// 注意: 依据上面的定义,数组 a 仅有 4 个数组元素,
//      分别为:a[0]、 a[1]、 a[2]、 a[3],并不存在数组元素 a[4] 
a[0] = 0;   /* 将数组 a 的 第 0 个 数组元素赋值为 0 */
a[1] = 1;   /* 将数组 a 的 第 1 个 数组元素赋值为 1 */
a[2] = 2;   /* 将数组 a 的 第 2 个 数组元素赋值为 2 */
a[3] = 3;   /* 将数组 a 的 第 3 个 数组元素赋值为 3 */
a[4] = 4;   /* 错误! */

Example 2 :使用初始化列表指定数组长度。

//通过对全部数组元素赋初值来指定数组长度,此时,可以不指定数组长度。
char g_A_Array[] = {0, 1, 2, 3, 4, 5};

printf("g_A_Array's length is %d\r\n", sizeof(g_A_Array));

运行结果
这里写图片描述

  • C 语言不允许对数组的大小做动态定义。即:常量表达式可以包括常量和符号常量,但不能包含变量。
// 常量表达式可以包含常量
int a[4];       // 正确
int b[1 + 3];   // 正确

// 常量表达式可以包含符号常量
#define ArraySize   4
int c[ArraySize];   // 正确

// 常量表达式不可以包含变量
int n;
scanf("%d", &n);
int a[n];   // 错误

NOTE:如果在被调用的函数(不包含主函数)中定义数组,数组的长度可以是变量或非常量表达式,此数组称为“可变长数组,variable-length arrays(VLAs)”
Example

/* 数组 a 的数组长度表达式为在调用 func 函数时形参 n 从实参得到的值
 * 允许在每次调用 func 函数时,n 有不同的值
 * 称数组 a 为 可变长数组,variable-length arrays (VLAs)
 * 若 a 数组为静态存储方式(static), 则不能用 VLAs,即 funb 的写法是错误的
 * VLAs 为 C99 标准中新增的一项
 * 
 * 值得注意的是,Visual Studio 不支持 VLAs
 * 若在 Visual Studio 中使用 VLAs,会报 “error C2123:表达式的计算结果不是常量” 的错误*/
void func(int n)
{
    int a[n];  /*正确*/
}

void funb(int n)
{
    static int a[n];  /*错误*/
}

二维数组

字符数组

指针

指针定义

指针变量

指针与数组

通过指针引用数组

指针数组和多重指针

通过指针引用字符串

指针与函数

指向函数的指针

返回指针值的函数

动态内存分配与指针

猜你喜欢

转载自blog.csdn.net/xiuhua_wu/article/details/80172789