C语言教程-详解C语言中的数组

数组是一种将相同类型的数据项存储在连续内存位置的集合。数组是 C 语言中的派生数据类型,可以存储原始数据类型(如 int、char、double、float)以及派生数据类型(如指针、结构体等)。数组是最简单的数据结构,可以使用索引号随机访问每个数据元素。
C 数组具有以下特点:
- 数组的每个元素具有相同的数据类型和大小,例如 int 类型占据 4 字节。
- 数组的元素存储在连续的内存位置中,其中第一个元素存储在最小的内存位置。
- 可以随机访问数组的元素,因为可以根据给定的基址和数据元素的大小计算出每个元素的地址。
C 数组的优点:
- 代码优化:访问数据的代码量较少。
- 遍历数组容易:使用 for 循环可以轻松获取数组的元素。
- 排序容易:只需几行代码即可对数组的元素进行排序。
- 随机访问:可以随意访问数组中的任何元素。
C 数组的缺点:
- 固定大小:在声明数组时定义的大小无法超过限制。因此,它不能像链表那样动态增长大小。
C 数组的声明:
可以使用以下方式在 C 语言中声明数组:
数据类型 数组名称[数组大小];
例如,下面是一个声明数组的示例:
int marks[5];
其中,int 是数据类型,marks 是数组名称,5 是数组大小。
C 数组的初始化:
最简单的初始化数组的方法是使用每个元素的索引号。可以使用索引为数组的每个元素进行初始化。考虑以下示例:
marks[0] = 80; // 数组初始化
marks[1] = 60;
marks[2] = 70;
marks[3] = 85;
marks[4] = 75;
C 数组的示例:
#include<stdio.h>
int main(){
int i = 0;
int marks[5]; // 数组声明
marks[0] = 80; // 数组初始化
marks[1] = 60;
marks[2] = 70;
marks[3] = 85;
marks[4] = 75;
// 遍历数组
for(i = 0; i < 5; i++){
printf("%d \n", marks[i]);
}
return 0;
}
输出结果:
80
60
70
85
75
C 数组的声明和初始化:
可以在声明数组时进行初始化。看下面的代码:
int marks[5] = {20, 30, 40, 50, 60};
在这种情况下,不需要定义大小。也可以写成以下代码:
int marks[] = {20, 30, 40, 50, 60};
让我们看一个在 C 中声明和初始化数组的程序示例:
#include<stdio.h>
int main(){
int i = 0;
int marks[5] = {20, 30, 40, 50, 60}; // 声明和初始化数组
// 遍历数组
for(i = 0; i < 5; i++){
printf("%d \n", marks[i]);
}
return 0;
}
输出结果:
20
30
40
50
60
C 数组示例:对数组进行排序
以下程序使用冒泡排序方法对数组按升序进行排序。
#include<stdio.h>
void main() {
int i, j, temp;
int a[10] = {10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
for(i = 0; i < 10; i++) {
for(j = i + 1; j < 10; j++) {
if(a[j] > a[i]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
printf("Printing Sorted Element List ...\n");
for(i = 0; i < 10; i++) {
printf("%d\n", a[i]);
}
}
打印输出已排序的元素列表。
程序示例:打印数组中最大和第二大的元素。
#include<stdio.h>
void main() {
int arr[100], i, n, largest, sec_largest;
printf("Enter the size of the array: ");
scanf("%d", &n);
printf("Enter the elements of the array: ");
for(i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
largest = arr[0];
sec_largest = arr[1];
for(i = 0; i < n; i++) {
if(arr[i] > largest) {
sec_largest = largest;
largest = arr[i];
} else if(arr[i] > sec_largest && arr[i] != largest) {
sec_largest = arr[i];
}
}
printf("largest = %d, second largest = %d", largest, sec_largest);
}