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

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日

相关文章

  • 记一次vnc远程连接linux问题解决记录(5900端口测试、kde桌…

    记一次VNC远程连接Linux问题解决记录(5900端口测试、KDE桌面环境) 背景 作为一名Linux爱好者,我经常会在家用VNC远程访问公司或家里的Linux机器。最近,我尝试远程连接一台安装KDE桌面环境的Linux机器,但是发现无法连接。在经过一番摸索之后,我找到了解决方法,现在将其分享给大家。 问题描述 我尝试使用VNC Viewer远程连接Lin…

    其他 2023年3月28日
    00
  • Python尾递归优化实现代码及原理详解

    Python尾递归优化实现代码及原理详解 什么是尾递归 递归是计算机编程中常用的一种算法。在递归中,函数在调用自身之前会执行一些操作。递归调用链会在一定条件下结束,如达到了某个递归深度,或者某个函数返回了终止条件。 尾递归是一种特殊的递归形式,即函数的最后一个操作是它的递归调用。在尾递归中,递归调用不会造成新的堆栈空间,它会用当前的堆栈替换掉调用它的堆栈(这…

    other 2023年6月27日
    00
  • Android如何实现社交应用中的评论与回复功能详解

    Android如何实现社交应用中的评论与回复功能详解 社交应用中的评论与回复功能是用户交流和互动的重要组成部分。在Android开发中,可以通过以下步骤实现这一功能: 1. 创建评论和回复的数据模型 首先,需要创建评论和回复的数据模型。可以使用Java类来表示评论和回复的信息,例如: public class Comment { private String…

    other 2023年7月28日
    00
  • Asp.net内置对象之Request对象(概述及应用)

    Asp.net内置对象之Request对象 在 Asp.net 开发中,Request 对象可以说是一个十分重要的内置对象。Request 对象封装了与客户端发出的 HTTP 请求相关的所有信息,包括请求头、请求正文以及 URL 属性等等。在本篇攻略中,我们将对 Request 对象进行概述及应用分析,并给出两条详细的实际应用示例。 Request 对象的概…

    other 2023年6月27日
    00
  • Win10 v2004版生命周期官宣:主流支持在2021年12月14日结束

    Win10 v2004版生命周期官宣:主流支持在2021年12月14日结束是什么? 这表示微软将在2021年12月14日结束对Windows 10 v2004版的主流支持。这意味着微软将停止为Windows 10 v2004版发布新的功能更新,并只发布关键的安全更新。 什么是主流支持和延长支持? Windows 10的生命周期分为两个阶段:主流支持和延长支持…

    other 2023年6月27日
    00
  • android杂记:C++文件的添加log方法分享

    下面我来详细讲解一下“android杂记:C++文件的添加log方法分享”的完整攻略。 前言 Android应用开发中使用C++的情况较为普遍。在C++中添加日志系统,可以方便开发者查看和追踪程序的执行情况,甚至可以用于分析程序的性能和错误。本篇文章将分享如何在C++的文件中添加日志输出的方法,在Android开发中更加便捷地使用C++。 步骤 步骤一:添加…

    other 2023年6月26日
    00
  • 使用AjaxPro.Net框架实现在客户端调用服务端的方法

    使用AjaxPro.Net框架可以方便地实现在客户端调用服务端的方法,具体的步骤如下: 步骤一:引入AjaxPro.Net框架 在项目中引入AjaxPro.Net框架的dll文件,并在Web.config中添加以下配置: <configuration> <system.web> <httpHandlers> <add…

    other 2023年6月27日
    00
  • Java判断IP地址为内网IP还是公网IP的方法

    Java判断IP地址为内网IP还是公网IP的方法 在Java中,可以使用以下方法来判断一个IP地址是内网IP还是公网IP。 方法一:使用正则表达式匹配 import java.util.regex.Pattern; public class IPAddressChecker { public static boolean isPrivateIP(String…

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