C语言中的数组是一种重要的数据结构,它允许我们在程序中存储和处理一组相同类型的数据。本文将深入探讨C语言数组的各个方面,包括一维数组和二维数组的创建、初始化、使用,以及它们在内存中的存储方式。还将介绍C99中的变长数组,以便更好地理解数组的灵活性。
数组的概念
在C语言中,数组是一组具有相同数据类型的元素的集合。这些元素按照一定的顺序排列,可以通过索引来访问。数组的大小在创建时被确定,并且通常是固定的。
在这里,我们需要注意:
1.数组元素个数不能为0;
2.数组中存放的数据的类型是相同的。
一维数组的创建与初始化
创建一维数组
要创建一个一维数组,需要指定数组的数据类型和大小。例如,创建一个整数数组可以这样做:
int myArray[5];
这将创建一个包含5个整数元素的数组。
一般地,我们可以将一维数组创建的基本语法概括如下:
type arr_name[常量值];
- type指定数组中存放数据的类型,既可以是int,short,long,float,char等等,也可以是自定义类型;
- arr_name是数组名,最好使用清晰、使用有意义的单词,采用蛇形命名法(如bubble_sort)或者驼峰命名法(如bubbleSort),个人建议能用英文(如Chinese)就不用汉语拼音(如yuwen)。当然,初学者需要慢慢适应。
- [ ]中的常量值用来指定数组大小。
初始化一维数组
一维数组可以在创建时初始化,也可以后续逐个元素初始化。下面是两种初始化方法的示例:
int myArray[5] = {1, 2, 3, 4, 5};
或者
int myArray[5];
myArray[0] = 1;
myArray[1] = 2;
myArray[2] = 3;
myArray[3] = 4;
myArray[4] = 5;
显然,第一种方法更为简便。
一维数组的使用
数组下标
在C语言中,数组的下标是用于访问数组元素的整数值。数组的下标从0开始,因此第一个元素的下标为0,第二个元素的下标为1,以此类推。要访问数组中的特定元素,你可以使用数组名后跟方括号,内部放置元素的下标。例如,如果有一个名为myArray
的整数数组,你可以通过myArray[0]
访问第一个元素,通过myArray[1]
访问第二个元素,依此类推。
int myArray[5]; // 创建一个包含5个整数元素的数组
myArray[0] = 10; // 设置第一个元素的值为10
myArray[1] = 20; // 设置第二个元素的值为20
int x = myArray[0]; // 将第一个元素的值(10)赋给变量x
数组元素的输入
通常,你需要从用户或文件中获取数组的元素值。你可以使用scanf
函数来实现从用户输入获取值,并将其存储到数组中。
int myArray[5];
for (int i = 0; i < 5; i++)
{
printf("请输入第%d个元素的值:", i + 1);
scanf("%d", &myArray[i]);
}
上述示例中,通过循环遍历数组的每个元素,然后使用scanf
从用户输入获取值,并使用&
运算符将值存储到数组元素中。
数组元素的打印输出
为了输出数组的元素,你可以使用printf
函数来显示它们。同样,你需要使用循环来遍历数组的元素,并将它们逐个打印出来。
int myArray[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++)
{
printf("myArray[%d] = %d\n", i, myArray[i]);
}
上述示例中,我们使用循环遍历数组,并使用printf
来打印每个元素的值和对应的下标。
如果你想将数组的所有元素连续输出到一行,你可以按如下方式操作:
int myArray[5] = {10, 20, 30, 40, 50};
printf("myArray: ");
for (int i = 0; i < 5; i++)
{
printf("%d ", myArray[i]);
}
printf("\n");
这将在一行中打印出数组的所有元素值,以空格分隔。
使用sizeof
计算数组元素个数
如果你想知道一维数组中的元素个数,可以使用sizeof
运算符。例如:
int count = sizeof(myArray) / sizeof(myArray[0]);
这将返回数组中元素的个数,即count
的值为5。
在这里我先提前提醒一下:sizeof是操作符,不是库函数哦!(我们将在下一节讲函数)
二维数组的创建与初始化
创建二维数组
要创建一个二维数组,你需要指定行数和列数。二维数组可以看作是一系列的一维数组,每个一维数组被称为一个"行",而元素则是"列"。例如,创建一个3行4列的整数二维数组可以这样做:
int my2DArray[3][4];
这将创建一个名为my2DArray
的二维数组,它有3行和4列。你可以根据你的需要调整行数和列数。
初始化二维数组
二维数组可以在创建时初始化,或者在后续逐个元素进行初始化。以下是两种初始化方法的示例:
创建时初始化:
int my2DArray[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
后续逐个元素初始化:
int my2DArray[3][4];
my2DArray[0][0] = 1;
my2DArray[0][1] = 2;
// 以此类推...
二维数组的使用
要访问二维数组的特定元素,你需要提供两个索引:一个用于行,另一个用于列。例如,my2DArray[1][2]
表示第二行第三列的元素,其值为7。你可以像这样使用二维数组来进行读取和赋值操作:
int value = my2DArray[1][2]; // 读取第二行第三列的元素值
my2DArray[0][1] = 42; // 将第一行第二列的元素设置为42
二维数组在内存中的存储
二维数组的元素在内存中是连续存储的,它们按行存储,每一行的元素依次排列。不同行之间也是连续的。这意味着,二维数组的元素是紧密排列的,它们按照行的顺序存储在内存中。
考虑以下的二维数组:
int my2DArray[3][4];
在内存中,它会像这样排列:
[0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] [2][0] [2][1] [2][2] [2][3]
C99中的变长数组
C99引入了变长数组的概念,允许在运行时确定数组的大小。这为数组的灵活性提供了更多的选择。例如,你可以这样创建一个变长数组:
int rows = 3; // 行数
int cols = 4; // 列数
int myVarLenArray[rows][cols];
在这里,数组的行数和列数是在运行时确定的,而不是在编译时。这对于需要根据运行时条件来决定数组大小的情况非常有用。
温馨提示,Visual Studio2019/2022使用MSVC编译器,不支持C99标准的变长数组。若想尝试使用变长数组,可以采用支持GCC编译器的IDE(集成开发环境)。
总之,C语言的数组是一种强大的数据结构,用于存储和操作相同类型的数据。一维数组和二维数组在创建、初始化、使用和内存存储方面有各自的特点,而C99的变长数组为我们提供了更大的灵活性。通过这篇文章,希望你对C语言中的数组有了更清晰的理解。