C语言中数组

简介: C语言中数组

C语言中数组

 

数组是C语言中一种重要的数据结构,用于存储相同类型数据的集合。数组可以分为一维数组和多维数组,其中多维数组以二维数组最为常见下面将分别讲解一维数组和多维数组的声明、初始化、访问及遍历。

一维数组

1. 声明

一维数组的声明需要指定数组的类型、名称和大小。其基本语法为:

类型说明符 数组名[常量表达式];

其中,类型说明符指定了数组中元素的类型,如int、char、float等;数组名是用户自定义的,用于标识数组;常量表达式指定了数组的大小,这个大小在数组声明时必须是一个正整数常量,不能是变量。例如:

int arr[10]; // 声明一个整型数组arr,包含10个元素

2. 初始化

一维数组可以在声明时初始化,也可以在之后通过代码逐个赋值。初始化时,可以完全初始化,也可以部分初始化。完全初始化时,为数组的每个元素指定一个值;部分初始化时,只指定部分元素的值,未指定的元素自动初始化为0(对于静态存储期或全局存储期的数组)或未定义(对于自动存储期的数组,如果未显式初始化)。例如:

int arr[5] = {1, 2, 3, 4, 5}; // 完全初始化

int arr2[10] = {1, 2, 3}; // 部分初始化,剩余元素自动初始化为0

3. 访问

访问一维数组的元素通过下标操作符[]进行,下标从0开始。例如,访问arr数组的第3个元素(即值为3的元素)使用arr[2]。

4. 遍历

遍历一维数组通常使用for循环或while循环。通过循环产生数组的下标,然后访问对应的元素。例如:

#include <stdio.h>

 

int main() {

int arr[5] = {1, 2, 3, 4, 5};

for (int i = 0; i < 5; i++) {

printf("%d ", arr[i]);

}

return 0;

}

多维数组(以二维数组为例)

1. 声明

二维数组的声明需要指定两个维度的大小,即行数和列数。其基本语法为:

类型说明符 数组名[常量表达式1][常量表达式2];

例如:

int matrix[3][4]; // 声明一个3行4列的整型二维数组

2. 初始化

二维数组也可以在声明时初始化。初始化时,可以完全初始化、部分初始化,还可以省略行大小(但列大小必须指定),编译器会根据初始化列表自动确定行的大小。例如:

int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 完全初始化

int arr2[3][4] = {{1, 2}, {3, 4}}; // 部分初始化,未指定的元素自动初始化为0

int arr3[][3] = {{1, 2, 3}, {4, 5, 6}}; // 省略行大小,自动确定为2行

3. 访问

访问二维数组的元素需要使用两个下标,分别表示行和列。例如,访问matrix数组的第2行第3列的元素(即值为0的元素,假设未初始化)使用matrix[1][2]。

4. 遍历

遍历二维数组通常使用嵌套的for循环。外层循环遍历行,内层循环遍历列。例如:

#include <stdio.h>

 

int main() {

int matrix[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 4; j++) {

printf("%d ", matrix[i][j]);

}

printf("\n"); // 换行,以便更好地查看矩阵结构

}

return 0;

}

综上所述,一维数组和多维数组在C语言中有着广泛的应用,它们的声明、

 

 

在深入探讨C语言中数组的应用与特性时,我们不仅要理解其基本声明、初始化、访问和遍历方法,还需进一步探索数组在复杂数据结构、算法实现、内存管理以及性能优化等方面的作用。以下将围绕这些方面展开详细论述,并通过具体的代码示例来增强理解。

一、数组的高级应用

1. 字符串处理

在C语言中,字符串实际上是以空字符('\0')结尾的字符数组。数组的这一特性使得它在处理字符串时非常高效。例如,我们可以使用数组来存储和修改字符串,以及执行字符串的比较、连接、复制等操作。

字符串复制示例:

#include <stdio.h>

 

void strcpy(char *dest, const char *src) {

while (*src != '\0') {

*dest = *src;

dest++;

src++;

}

*dest = '\0'; // 确保字符串以空字符结尾

}

 

int main() {

char src[] = "Hello, World!";

char dest[20];

strcpy(dest, src);

printf("Copied string: %s\n", dest);

return 0;

}

2. 数组作为函数参数

在C语言中,数组名在表达式中会被转换为指向数组首元素的指针。这一特性使得数组可以方便地作为函数参数传递,从而实现在函数间共享和操作数组数据。

数组排序函数示例(使用冒泡排序算法):

#include <stdio.h>

 

void bubbleSort(int arr[], int n) {

for (int i = 0; i < n-1; i++) {

for (int j = 0; j < n-i-1; j++) {

if (arr[j] > arr[j+1]) {

// 交换 arr[j] 和 arr[j+1]

int temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

}

}

}

}

 

int main() {

int arr[] = {64, 34, 25, 12, 22, 11, 90};

int n = sizeof(arr)/sizeof(arr[0]);

bubbleSort(arr, n);

printf("Sorted array: \n");

for (int i = 0; i < n; i++)

printf("%d ", arr[i]);

printf("\n");

return 0;

}

二、多维数组的高级应用

1. 矩阵运算

多维数组,特别是二维数组,常用于表示矩阵,并用于执行矩阵运算,如矩阵加法、乘法、转置等。这些运算在图形学、物理学、工程学等多个领域有广泛应用。

矩阵乘法示例:

#include <stdio.h>

 

#define ROWS 2

#define COLS 2

 

void matrixMultiply(int mat1[ROWS][COLS], int mat2[COLS][COLS], int result[ROWS][COLS]) {

for (int i = 0; i < ROWS; i++) {

for (int j = 0; j < COLS; j++) {

result[i][j] = 0;

for (int k = 0; k < COLS; k++) {

result[i][j] += mat1[i][k] * mat2[k][j];

}

}

}

}

 

int main() {

int mat1[ROWS][COLS] = {{1, 2}, {3, 4}};

int mat2[COLS][COLS] = {{2, 0}, {1, 2}};

int result[ROWS][COLS];

matrixMultiply(mat1, mat2, result);

for (int i = 0; i < ROWS; i++) {

for (int j = 0; j < COLS; j++) {

printf("%d ", result[i][j]);

}

printf("\n");

}

return 0;

}

 

目录
相关文章
|
2月前
|
存储 C语言 C++
【C语言数组】
【C语言数组】
|
1天前
|
存储 编译器 C语言
【C语言】数组(一维、二维数组的简单介绍)
【C语言】数组(一维、二维数组的简单介绍)
|
27天前
|
存储 编译器 C语言
【C语言基础考研向】09 一维数组
数组是一种有序集合,用于存储相同类型的数据,便于统一操作与管理。例如,将衣柜底层划分为10个格子存放鞋子,便于快速定位。在C语言中,数组定义格式为 `类型说明符数组名[常量表达式];`,如 `int a[10];` 表示定义了一个包含10个整数的数组。数组初始化时可以直接赋值,也可以部分赋值,且数组长度必须固定。数组在内存中连续存储,访问时需注意下标范围,避免越界导致数据异常。数组作为参数传递时,传递的是首地址,修改会影响原数组。
|
27天前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
|
1天前
|
存储 编译器 C语言
【C语言篇】数组和函数的实践:扫雷游戏(附源码)
【C语言篇】数组和函数的实践:扫雷游戏(附源码)
7 0
|
1天前
|
编译器 C语言
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
|
1月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解
本章介绍了C语言中的数组概念及应用。数组是一种存储同一类型数据的线性结构,通过下标访问元素。一维数组定义需指定长度,如`int a[10]`,并遵循命名规则。数组元素初始化可使用 `{}`,多余初值补0,少则随机。二维数组扩展了维度,定义形式为`int a[3][4]`,按行优先顺序存储。字符数组用于存储字符串,初始化时需添加结束符`\0`。此外,介绍了字符串处理函数,如`strcat()`、`strcpy()`、`strcmp()` 和 `strlen()`,用于拼接、复制、比较和计算字符串长度。
|
2月前
|
算法 C语言
C语言------数组
这篇文章是关于C语言数组的实训,包括一维数组、二维数组和字符数组的定义、赋值、输入、输出方法,并通过实例代码演示了数组的使用和一些基本算法,如冒泡排序。
C语言------数组
|
2月前
|
存储 编译器 程序员
七:《初学C语言》— 数组
【8月更文挑战第2天】本篇文章详细讲解了一维数组和二维数组的创建、使用和初始化及如何使用sizeof()计算数组中的元素个数。并附带了多个教学源码及代码练习
45 1
七:《初学C语言》— 数组
|
2月前
|
存储 编译器 数据处理
【编程秘籍】解锁C语言数组的奥秘:从零开始,深入浅出,带你领略数组的魅力与实战技巧!
【8月更文挑战第22天】数组是C语言中存储同类型元素的基本结构。本文从定义出发,详述数组声明、初始化与访问。示例展示如何声明如`int numbers[5];`的数组,并通过下标访问元素。初始化可在声明时进行,如`int numbers[] = {1,2,3,4,5};`,编译器自动计算大小。初始化时未指定的元素默认为0。通过循环可遍历数组,数组名视为指向首元素的指针,方便传递给函数。多维数组表示矩阵,如`int matrix[3][4];`。动态数组利用`malloc()`分配内存,需用`free()`释放以避免内存泄漏。掌握这些技巧是高效数据处理的基础。
57 2