C语言数组的各种操作梳理

yizhihongxing

C语言数组的各种操作梳理

1. 定义数组

定义数组需要指定数组的类型、名称和元素个数,语法如下:

type arrayName[arraySize];

示例1:定义一个长度为10的整型数组

int numbers[10];

示例2:定义一个长度为5的double类型数组

double scores[5];

2. 数组初始化

数组初始化可以在定义时进行,通过一对花括号来指定数组的初始值,或者在数组定义之后通过循环等方式来进行。

语法1:在定义数组时进行初始化

type arrayName[arraySize] = {element0, element1, ..., elementN};

例如:

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

语法2:定义数组之后在代码中进行初始化

使用for循环来初始化数组:

for (int i=0; i<arraySize; i++) {
    arrayName[i] = someValue;
}

例如:

double scores[5];
for (int i=0; i<5; i++) {
    scores[i] = (double)i * 2.5;
}

3. 读写数组元素

通过数组下标来读写数组元素,数组下标从0开始。

arrayName[index]

例如,读取numbers数组中的第3个元素:

int third = numbers[2];

将numbers数组中的第4个元素赋值为10:

numbers[3] = 10;

4. 数组的长度

数组的长度可以通过sizeof操作符来获取,即数组占用空间大小除以类型大小等于数组长度。

sizeof(arrayName) / sizeof(type)

例如,获取numbers数组的长度:

int length = sizeof(numbers) / sizeof(int);

5. 数组遍历

可以使用for循环来遍历数组,读取或更新数组中的所有元素。

for (int i=0; i<arraySize; i++) {
    // do something with arrayName[i]
}

例如,打印scores数组中的所有元素:

for (int i=0; i<5; i++) {
    printf("scores[%d] = %f\n", i, scores[i]);
}

6. 二维数组

定义二维数组需要指定数组类型、名称、行数和列数,语法如下:

type arrayName[rowSize][colSize];

示例:

int matrix[3][3];

二维数组的操作和一维数组类似,需要指定两个下标来访问数组元素。

7. 指针与数组

可以使用指针来访问数组元素,指针变量初始化为数组名,然后通过指针变量加上偏移量来访问数组元素。

*(arrayName + index)

例如,使用指针p来访问numbers数组中的第3个元素:

int* p = numbers; // p指向numbers数组的第0个元素
int third = *(p + 2);

8. 动态分配数组内存

可以使用malloc函数来动态分配数组内存,需要指定要分配的字节数,然后将void指针强制转换为数组指针类型即可。

语法:

type* arrayName = malloc(size*sizeof(type));

示例:

int* nums = malloc(5*sizeof(int));

9. 数组作为函数参数

数组可以作为函数参数传递,可以通过引用传递来修改数组元素。

语法:

void functionName(type arrayName[], int arraySize) {
    // do something with arrayName
}

示例:

void printIntArray(int nums[], int length) {
    for (int i=0; i<length; i++) {
        printf("%d ", nums[i]);
    }
    printf("\n");
}

调用:

int numbers[5] = {1, 2, 3, 4, 5};
printIntArray(numbers, 5);

输出:

1 2 3 4 5

10. 数组排序算法

常见的数组排序算法有冒泡排序、选择排序、插入排序、快速排序等。这里以快速排序为例,给出代码实现。

void quickSort(int arr[], int left, int right) {
    if (left < right) {
        int pivot = arr[left];
        int i = left, j = right;
        while (i < j) {
            while (arr[j] > pivot && j > i) {
                j--;
            }
            while (arr[i] < pivot && i < j) {
                i++;
            }
            if (i < j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        arr[left] = arr[i];
        arr[i] = pivot;
        quickSort(arr, left, i-1);
        quickSort(arr, i+1, right);
    }
}

示例:

int numbers[10] = {8, 5, 7, 6, 2, 3, 9, 1, 4, 0};
int length = sizeof(numbers) / sizeof(int);
quickSort(numbers, 0, length-1);
printIntArray(numbers, length);

输出:

0 1 2 3 4 5 6 7 8 9

以上就是C语言数组的各种操作,包括定义数组、数组初始化、读写数组元素、数组长度、数组遍历、二维数组、指针与数组、动态分配数组内存、数组作为函数参数以及数组排序算法等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言数组的各种操作梳理 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 如何实现bean初始化摧毁方法的注入

    实现bean初始化摧毁方法的注入,需要通过Spring的IOC容器实现。Spring提供了两种方式来实现bean的初始化和销毁方法的注入:使用注解和使用XML配置文件。 一、使用注解的方式: 使用注解@PostConstruct来指定bean初始化方法,使用@PreDestroy来指定bean销毁方法。 @Component public class MyB…

    other 2023年6月20日
    00
  • 后缀名为.bak是什么文件格式,该如何打开

    后缀名为.bak的文件是备份文件,通常用于存储原始文件的副本。这种文件格式不是特定的文件类型,而是一种常见的命名约定。.bak表示\”backup\”(备份)的缩写。 要打开.bak文件,你需要知道原始文件的类型。因为.bak文件只是原始文件的备份,所以你需要找到与之对应的原始文件,并使用适当的应用程序打开它。 以下是两个示例说明: 示例一:打开.bak的数…

    other 2023年8月5日
    00
  • python中的tcp示例详解

    Python中的TCP示例详解 在Python中,使用TCP/IP协议进行网络通信非常常见。本篇文章将结合两个简单的例子,详细讲解Python中如何使用TCP协议进行通信。 示例一:客户端与服务端的基本交互 首先,我们需要了解socket模块。在Python中,socket模块提供了构建网络应用程序所需的基础设施。具体可以通过以下代码引入socket模块: …

    other 2023年6月27日
    00
  • vmware在宿主上没有vmnet0、vmnet8 解决方法

    当在VMware中创建虚拟机时,可能会遇到“vmware在宿主上没有vmnet0、vmnet8”的问题。这个问题通常是由于VMware网络适配器未正确安装或配置引起的。下面是解决这个问题的完整攻略: 步骤1:检查VMware网络适配器 在VMware中,可以通过以下步骤检查网络适配器: 打开VMware; 点击“编辑”菜单; 选择“虚拟网络编辑器”; 在“虚…

    other 2023年5月6日
    00
  • 苹果iOS10正式版固件下载 苹果iOS10正式版固件下载地址大全

    苹果iOS10正式版固件下载攻略 苹果iOS10正式版固件是苹果公司发布的最新操作系统版本。本攻略将详细介绍如何下载苹果iOS10正式版固件,并提供苹果iOS10正式版固件下载地址大全。 步骤一:准备工作 在开始下载苹果iOS10正式版固件之前,请确保您满足以下准备工作: 确认设备兼容性:苹果iOS10正式版固件支持的设备包括iPhone 5及以上型号、iP…

    other 2023年8月4日
    00
  • mybatis 实现多层级collection嵌套

    MyBatis 实现多层级 Collection 嵌套的攻略 在 MyBatis 中,我们可以使用嵌套查询来实现多层级 Collection 的嵌套。下面是一个详细的攻略,包含了两个示例说明。 步骤一:定义数据模型 首先,我们需要定义数据模型,包括主实体和嵌套的子实体。例如,我们有两个实体类:Order 和 Item。 public class Order …

    other 2023年7月27日
    00
  • Android 遍历SDCARD的文件夹并显示目录信息

    Android 遍历SDCARD的文件夹并显示目录信息攻略 在Android应用中,要遍历SD卡的文件夹并显示目录信息,可以按照以下步骤进行操作: 添加权限:首先,在AndroidManifest.xml文件中添加以下权限,以获取读取SD卡的权限: <uses-permission android:name=\"android.permiss…

    other 2023年8月5日
    00
  • C++中function的实现原理详解

    C++中function的实现原理详解 1. function的概述 function是C++11引入的一个函数对象封装器,它可以像函数指针一样存储和调用可调用对象。function可以存储的可调用对象包括函数、函数指针、成员函数指针和仿函数等,因此它具有很高的灵活性和通用性。 function的定义形式如下: std::function<return…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部