「C系列」C 数组

文章目录

  • 一、C 数组
    • 1. 声明数组
    • 2. 初始化数组
    • 3. 访问数组元素
    • 4. 数组越界
    • 5. 多维数组
  • 二、C 操作数组的方法有哪些
  • 三、C 数组-应用场景
    • 1. 存储固定数量的数据
    • 2. 实现算法(如排序)
    • 3. 处理数据集合
  • 四、相关链接

一、C 数组

在C语言中,数组是一种数据结构,用于存储相同类型的元素的集合。数组的大小在创建时确定,并且在整个数组的生命周期内保持不变。C语言中的数组是静态的,意味着一旦创建,就不能改变其大小。

1. 声明数组

在C语言中,你可以使用以下语法声明数组:

type arrayName[size];

其中:

  • type 是数组中元素的类型(如 intfloatchar 等)。
  • arrayName 是数组的名称。
  • size 是数组的大小,表示数组可以容纳的元素数量。

2. 初始化数组

你可以在声明数组的同时初始化它:

int numbers[] = {1, 2, 3, 4, 5}; // 隐式指定大小
int days[7] = {1, 2, 3, 4, 5, 6, 7}; // 显式指定大小

3. 访问数组元素

你可以使用索引来访问数组中的元素。在C语言中,数组的索引从0开始。以下是如何访问数组元素的示例:

#include <stdio.h>int main() {int numbers[] = {1, 2, 3, 4, 5};printf("The first element is: %d\n", numbers[0]);printf("The last element is: %d\n", numbers[4]);return 0;
}

4. 数组越界

C语言不会检查你是否访问了数组的有效范围。如果你试图访问一个不存在的数组元素(即索引超出了数组的大小),你将会得到一个未定义的行为,这可能导致程序崩溃或产生意外的结果。因此,当使用数组时,务必确保不要越界。

5. 多维数组

C语言还支持多维数组,如二维数组和三维数组等。二维数组通常用于表示矩阵或表格。以下是一个二维数组的示例:

#include <stdio.h>int main() {int matrix[3][3] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};printf("Element at row 1, column 2 is: %d\n", matrix[1][2]);return 0;
}

二、C 操作数组的方法有哪些

在C语言中,操作数组的方法通常包括以下几个基本类别:

  1. 数组声明与初始化
  • 声明一个数组时,需要指定数组的类型和大小。
  • 可以在声明的同时初始化数组,也可以后续逐个赋值。
int array[10]; // 声明一个大小为10的整型数组
int array2[5] = {1, 2, 3, 4, 5}; // 声明并初始化一个整型数组
  1. 数组元素访问
  • 使用索引(下标)来访问数组中的元素。索引从0开始。
int value = array[2]; // 访问数组的第三个元素(因为索引从0开始)
  1. 遍历数组
  • 使用循环结构(如for循环、while循环)遍历数组的每个元素。
for (int i = 0; i < 10; i++) {printf("%d ", array[i]);
}
  1. 修改数组元素
  • 直接使用索引和赋值运算符来修改数组中的元素。
array[2] = 100; // 修改数组的第三个元素为100
  1. 数组作为函数参数
  • 可以将数组作为参数传递给函数,但通常需要传递数组的首地址和大小(因为C语言中的数组名实际上是首元素的地址)。
void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}
}
  1. 数组与字符串
  • C语言中的字符串实际上是字符数组。可以使用字符数组来存储和操作字符串。
char str[10] = "Hello"; // 声明并初始化一个字符数组(字符串)
  1. 数组排序
  • 使用各种排序算法(如冒泡排序、选择排序、插入排序、快速排序等)对数组进行排序。
// 示例:冒泡排序
void bubbleSort(int arr[], int n) {// ... 排序算法的实现 ...
}
  1. 数组搜索
  • 实现各种搜索算法(如线性搜索、二分搜索等)来在数组中查找特定元素。
// 示例:线性搜索
int linearSearch(int arr[], int n, int target) {for (int i = 0; i < n; i++) {if (arr[i] == target) {return i; // 找到目标元素,返回其索引}}return -1; // 未找到目标元素
}
  1. 多维数组
  • 可以声明和操作多维数组,如二维数组、三维数组等。
int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 声明并初始化一个二维数组
  1. 动态数组
  • C语言本身不支持动态数组(在运行时改变大小),但可以使用指针和动态内存分配(如mallocfree)来模拟动态数组的行为。
int *dynamicArray = malloc(10 * sizeof(int)); // 动态分配内存
// ... 使用数组 ...
free(dynamicArray); // 释放内存

三、C 数组-应用场景

C 数组在编程中有广泛的应用场景,包括但不限于存储固定数量的数据、实现算法(如排序、搜索等)、处理数据集合等。以下是一些具体的应用场景和相应的详细案例代码。

1. 存储固定数量的数据

假设我们要存储一个班级中所有学生的成绩。

#include <stdio.h>int main() {// 假设班级有10个学生int grades[10];// 假设我们已经有了学生的成绩for (int i = 0; i < 10; i++) {grades[i] = 80 + i; // 为了示例,我们简单地给每个学生一个递增的成绩}// 打印所有学生的成绩for (int i = 0; i < 10; i++) {printf("Student %d's grade: %d\n", i + 1, grades[i]);}return 0;
}

2. 实现算法(如排序)

使用数组来实现冒泡排序算法。

#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;
}

3. 处理数据集合

假设我们有一个整数数组,我们需要找出数组中的最大值和最小值。

#include <stdio.h>int main() {int arr[] = {5, 1, 9, 3, 7};int n = sizeof(arr) / sizeof(arr[0]);int min = arr[0], max = arr[0];// 遍历数组找到最大值和最小值for (int i = 1; i < n; i++) {if (arr[i] < min) {min = arr[i];}if (arr[i] > max) {max = arr[i];}}printf("Minimum element in array is %d\n", min);printf("Maximum element in array is %d\n", max);return 0;
}

这些示例展示了 C 数组在不同场景中的应用,从简单的数据存储到复杂的算法实现。

四、相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C系列」C 简介
  4. 「C系列」C 基本语法
  5. 「C系列」C 数据类型
  6. 「C系列」C 变量及常见问题梳理
  7. 「C系列」C 常量
  8. 「C系列」C 存储类
  9. 「C系列」C 运算符
  10. 「C系列」C 判断/循环
  11. 「C系列」C 函数
  12. 「C系列」C 作用域规则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 类与对象 -- Java 语言的类与对象、构造器、static、final、包和 JAR

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 006 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…

认识Spring中的BeanFactoryPostProcessor

先看下AI的介绍 在Spring 5.3.x中&#xff0c;BeanFactoryPostProcessor是一个重要的接口&#xff0c;用于在Spring IoC容器实例化任何bean之前&#xff0c;读取bean的定义&#xff08;配置元数据&#xff09;&#xff0c;并可能对其进行修改。以下是关于BeanFactoryPostProce…

【学习笔记】finalshell上传文件夹、上传文件失败或速度为0

出现标题所述的情况&#xff0c;大概率是finalshell上传文件的过程中的权限不够。 可参照&#xff1a;Finalshell上传文件失败或者进度总为百分之零解决方法 如果不成功&#xff0c;建议关闭客户端重试。 同时建议在设置finalshell的ssh连接时根据不同用户设置多个连接&#xf…

OJ刷题——2086.AI=?、2087.剪花布条、KPM算法

2086.AI&#xff1f; 题目描述 Problem - 2086 运行代码 #include <iostream> #include <cstdio> using namespace std; const int N 3005; int main() {int n;double Ao, An;double num[N];while (cin>>n) {cin >> Ao>>An;for (int i 1; i…

java技术专家面试指南100问【java学习+面试宝典】(二)

适配器模式是什么&#xff1f;什么时候使用&#xff1f; 适配器模式&#xff08;Adapter Pattern&#xff09;是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式&#xff0c;它结合了两个独立接口的功能。适配器模式提供对接口的转换。如果你的客户端使用某…

kubernetes(k8s)集群部署(2)

目录 k8s集群类型 k8s集群规划&#xff1a; 1.基础环境准备&#xff1a; &#xff08;1&#xff09;保证可以连接外网 &#xff08;2&#xff09;关闭禁用防火墙和selinux &#xff08;3&#xff09;同步阿里云服务器时间&#xff08;达到集群之间时间同步&#xff09; &…

html+CSS+js部分基础运用20

根据下方页面效果如图1所示&#xff0c;编写程序&#xff0c;代码放入图片下方表格内 图1.效果图 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" conte…

LabVIEW调用DLL时需注意的问题

在LabVIEW中调用DLL&#xff08;动态链接库&#xff09;是实现与外部代码集成的一种强大方式&#xff0c;但也存在一些常见的陷阱和复杂性。本文将从参数传递、数据类型匹配、内存管理、线程安全、调试和错误处理等多个角度详细介绍LabVIEW调用DLL时需要注意的问题&#xff0c;…

UE5实战篇二(对话系统1):导语

实现一款商业游戏中使用的对话系统插件。 虚幻商店链接&#xff1a; https://www.unrealengine.com/marketplace/zh-CN/product/0b84eaa9343543f58138bc4956a2fa8f 1. 内容可配置 2. 多分支对话、旁白对话、对话序列动画、文字显示及各种特效 3. 可配置文字、音效、呈现位…

UML 统一建模语言简介

UML&#xff08;统一建模语言&#xff0c;Unified Modeling Language&#xff09;是一种标准化的建模语言&#xff0c;广泛用于软件工程中以可视化、描述、构建和记录系统的结构和行为。UML 提供了多种图表&#xff0c;用于不同的建模需求。以下是 UML 的主要使用方法和一些常见…

邻接矩阵深度优先遍历

深度优先遍历&#xff0c;就是一条路&#xff0c;走到底&#xff0c;然后再走下一个岔路。 下面代码就主要使用递归来进行&#xff0c;当然也可以借助栈来实现。 private void traverse(char v, boolean[] visited) {int index _getIndexOfV(v);//获取v顶点在vertexS字符数组…

【Spring Boot】过滤敏感词的两种实现

文章目录 项目场景前置知识前缀树 实现方式解决方案一&#xff1a;读取敏感词文件生成前缀树构建敏感词过滤器1. 导入敏感词文件 src/main/resources/sensitive_words.txt2. 构建敏感词过滤器 SensitiveFilter3. 测试与使用 解决方案二&#xff1a;使用第三方插件 houbb/sensit…

Prisma数据库ORM框架学习

初始化项目 中文网站 点击快速开始,点击创建sql项目,后面一步一步往后走 这个博主也挺全的,推荐下 可以看这个页面初始化项目跟我下面是一样的,这里用得是ts,我下面是js,不需要额外的配置了 1.vscode打开一个空文件夹 2.npm init -y 初始化package.json 3.安装相关依赖 …

「前端+鸿蒙」鸿蒙应用开发-TS接口-语法多态

在 TypeScript 中&#xff0c;接口&#xff08;Interfaces&#xff09;是一种强大的方式来定义对象的结构&#xff0c;它们用于类型检查和确保对象符合特定的结构。接口也可以用于类&#xff0c;实现类似多态的特性。以下是 TypeScript 中接口的语法和多态的快速入门指南。 TS快…

常用的通信协议

最近在做项目&#xff0c;用到了一些通信协议&#xff0c;这里详细整理一下相关的通信协议&#xff0c;方便以后查阅。 常用的通信协议 单工 半双工 全双工单工通信&#xff08;Simplex Communication&#xff09;半双工(Half-duplex Communication)全双工&#xff08;Full-dup…

速卖通如何放关联?

大家都知道&#xff0c;想要进行多账号操作必须一再小心&#xff0c;否则会有很大的关联风险&#xff0c;而账号关联所带来的后果是卖家绝对不能轻视的&#xff0c;严重的话会导致封号&#xff0c;这样一来自己前期的辛苦运营就全都打水漂了&#xff0c;因此防关联很重要&#…

Python框架scrapy有什么天赋异禀

Scrapy框架与一般的爬虫代码之间有几个显著的区别&#xff0c;这些差异主要体现在设计模式、代码结构、执行效率以及可扩展性等方面。下面是一些关键的不同点&#xff1a; 结构化与模块化&#xff1a; Scrapy&#xff1a;提供了高度结构化的框架&#xff0c;包括定义好的Spider…

MySQL—多表查询—小结

一、引言 前面的博客已经全部学习完了关于多表查询。接下来对多表查询进行一个小结。 &#xff08;1&#xff09;多表查询主要是讲了两个方面 多表关系 &#xff08;不管业务关系如何的复杂&#xff0c;最终多表的关系基本上可以分为三类&#xff09; "一对多"、&qu…

大数据技术Hbase列数据库——topic3

目录 启动Hadoop启动HbaseHbase常用Shell命令基本命令关于表的操作增删改查询 启动Hadoop 1.到Hadoop安装目录下输入命令 sbin/start-all.sh[rootlocalhost hadoop-2.7.1]# sbin/start-all.sh This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh Starti…

《Vue》系列文章目录

Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以…