当前位置: 首页 > news >正文

C语言——二维数组和字符数组

二维数组

二维数组本质上是一个行列式的组合,也就是二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。

定义形式:

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

eg:

int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}

int arr[][] = {{1,2,3},{4,5,6},{7,8,9}}

int arr[3][] = {{1,2},{4,5,6},{7}}//等价于int arr[3][3]

说明:

在C语言中,二维数组在计算机中的存储顺序是按行进行的。

二维数组元素

表示形式:

数组名[下标1][下标2];

eg:  

a[2][3],b[4][9];

 

下标可以是整型表达式,如:a[2-1][2*2-1]

下标可以是已经有值的变量或数组元素, 如:a[2*x-1][b[3][1]]

数组元素可以出现在表达式中, 如:b[1][2]=a[2][3]/2

注意:

使用时数组元素的下标应在已定义数组的大小范围内;      

应注意区别定义数组大小和引用数组元素的区别。

二维数组初始化

方法:

⑴ 分行给二维数组赋初值。如:

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

⑵ 可将所有数据写在一个花括号内,按排列顺序对个元素赋值。如:

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

⑶ 可对部分元素赋初值,其余自动取0值(\0|0.0)。如:

int a[3][4]={{1},{5,6},{9}};

⑷ 若对全部元素赋初值,则定义数组时可不说明第一维的长度(对方括号不能省),第二维的长度必须指明。如:

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

⑸ 在分行赋初值时,也可以省略第一维的长度说明。如:

int a[ ][4]={{1,2,3},{0},{0,10}};

eg:

二维数组的遍历

#include <stdio.h>

int main()

{

        int arr[][3] = {{1},{2,4},{5,6,7}};// 经过论证:二维数组我们必须指明第2维的数组的长度

        // 获取行元素的大小

        int length = sizeof(arr) / sizeof(arr[0]); // 如果是二维数组,第1维的长度,应该是如左侧这样获取

        printf("length:%d\n",length);

        

        // 遍历二维数组,需要使用双层for循环,外层遍历内层遍历每一行的

        for(int row = 0;row length;row++)

        {

        // 获取列元素的总大小

        int len = sizeof(arr[row]) / sizeof(int);

        for(int col = 0; col len; col++)

        {

        // 获取列元素

        printf("%3d",arr[row][col]);// 意思是获取数组arr 第row行第col列

        }

        printf("\n");

        }

        return 0;

        }// 数据类型,分支结构,循环结构,数组

二维数组:矩阵转置

/**

* 需求:二维数组案例-矩阵的转置(就是将一个2行3列的数组转换为3行2列的数组)

*/

#include

int main()

        {

        // 准备2个数组,存放转前和转后的数据

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

        int arr_after[3][2] = {0};// 初始化,每一列上都是0

        

        // 遍历arr_before

        for(int i = 0;i sizeof(arr_before)/sizeof(arr_before[0]);i++)

        {

        for(int j = 0;j sizeof(arr_before[i])/sizeof(int);j++)

        

        // 转置

        arr_after[j][i] = arr_before[i][j];

        }

        }

        // 遍历arr_after

        for(int i = 0;i sizeof(arr_after)/sizeof(arr_after[0]);i++)

        {

        for(int j = 0;j sizeof(arr_after[i])/sizeof(int);j++)

        {

        // 输出

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

        }

        printf("\n");

        }

        return 0;

        }

字符数组

概念:

元素类型为char字符型的数组,字符数组往往是用来存储字符串数据的。需要注意的一点是,我们

C语言中的字符是字节字符。

字节字符:也就是一个字符占1个字节

语法:

char 数组名[容量]

char 数组名[行容量][列容量]

测试:

char a = 'A'

char b = '1'

char c = 65

char d = "A"  //错误,因为这是字符串写法,也是char数组的写法,char d[1] = "A"

char e = “马”  //错误,中文一个字符超过一个字节

eg:

#include <stdio.h>

int main()
{
        char arr[7][7] = {{' ',' ',' ','*',' ',' ',' '},
                          {' ',' ','*',' ','*',' ',' '},
                          {' ','*',' ',' ',' ','*',' '},
                          {'*',' ',' ',' ',' ',' ','*'},
                          {' ','*',' ',' ',' ','*',' '},
                          {' ',' ','*',' ','*',' ',' '},
                          {' ',' ',' ','*',' ',' ',' '}
                         };

        for(int i = 0;i < sizeof(arr)/sizeof(arr[0]);i++)
        {
                for(int j =0;j < sizeof(arr[i])/sizeof(char);j++)
                {
                        printf("%c",arr[i][j]);
                }
                printf("\n");
        }

        return 0;
}

字符串和字符串结束标志

说明:

C语言规定,字符串以字符'\0'作为结束标志

编译系统对字符串常量自动加一个'\0'作为结束标志。

程序中往往通过判断'\0'来检测字符串是否结束。

'\0'的ASCII码为0,不是一个可显示的字符,是“空操作符”,什么都不做,不会增加有效字符,仅是一个供判别的标志。

字符数组的多样表示

char数组可以以数组的方式一个个输出每个字符;我们的char数组也可以以字符串的方式整体进行输出所有字符

具体如下面案例:

/*

需求:字符数组->字符串

*/

#include

int main()

{

// 字符串第1种表示:

char s1[] = {'h','e','l','l','o',' ','w','o','r','l','d'};

// 字符串第2种表示:

char s2[] = {"hello world"};

// 字符串第3种表示:

char s3[] = "hello world";

// 测试,使用字符串方式打印,这样就不用一一遍历

printf("%s\n",s1);        //hello world

printf("%s\n",s2);        //hello world

printf("%s\n",s3);        //hello world

return 0;

}

注意:

字符串的长度与字符数组的长度不一定相同。

利用字符串常量可以对字符数组进行初始化,但不能用字符串常量为字符数组赋值。

// 正确写法:利用字符串常量给字符数组初始化

char b[15] = "China";

// 错误写法:利用字符串常量给字符数组赋值

char b[15];

b[15] = "China";

字符串输入

格式:

scanf("%s",数组名)

注意:

采用scanf进行字符串输入,要求字符串中不能存在空格,否则字符串遇到空格会结束。

fgets(数组名,数组容量,stdin);

说明:采用fgets进行字符串输入,可获取所有输入的字符串,包含\n,在实际的字符串处理时,我们可能需要处理\n

注意:

1. 如果输入的字符串不包含空格和换行,可以使用scanf() | fgets();

2. 如果输入的字符串需要包含空格和换行,只能使用fgets();

3. 经过对比,我们发现,在字符串的输入中,fgets()更好;

字符串输出

puts(数组名)

printf("%s",数组名);

字符串拼接

strcat(数组名,"需要拼接的字符串")

注意:需要引入#include  <string.h>

字符串拷贝

strcpy(数组名,字符串)

注意:需要引入<string.h>

说明:这个方法适合给字符串赋值用。

字符串比较

strcmp(字符串1,字符串2);

注意:

1. 需要引入<string.h>

2. 返回的结果是boolean

获取字符串长度

strlen(字符串)

注意:

1. 需要<string.h>

2. 返回字符串长度

相关文章:

C语言——二维数组和字符数组

二维数组 二维数组本质上是一个行列式的组合&#xff0c;也就是二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。 定义形式&#xff1a; 类型&#xff08;说明符&#xff09; 数组名[行数&#xff08;常量表达式1&#xff09;][列数&#xff08;常量表达式…...

Python 爬虫入门(九):Scrapy安装及使用「详细介绍」

Python 爬虫入门&#xff08;九&#xff09;&#xff1a;Scrapy安装及使用「详细介绍」 前言1. Scrapy 简介2. Scrapy 的安装2.1 环境准备2.2 安装 Scrapy 3. 创建 Scrapy 项目3.1 创建项目3.2 项目结构简介 4. 编写爬虫4.1 创建爬虫4.2 解析数据4.3 运行爬虫 5. 存储数据5.1 存…...

扩展addr2line程序的功能,group_add2line() 脚本的实现

------------------------------------------------------------ author: hjjdebug date: 2024年 08月 05日 星期一 16:19:07 CST descrition: 扩展addr2line程序的功能,group_add2line() 脚本的实现 ------------------------------------------------------------ 扩展addr2…...

idea中修改项目名称

公司最近有个小项目新加了很多功能&#xff0c;在叫原先的项目名有点不合适了。所以在网上查了下资料&#xff0c;发现步骤都比较复杂。自己研究了一下找到了一个相对简单的方法&#xff0c;只需要两步&#xff0c;特此记录一下。 1.修改项目文件夹名称 关闭当前项目&#xff…...

Flink开发语言使用Java还是Scala合适?

目录 1. Flink简介 1.1 什么是Apache Flink&#xff1f; 1.2 Flink的核心组件 2. Java与Scala在Flink开发中的比较 2.1 语言特性对比 2.2 开发体验对比 3. 实际开发中的应用 3.1 使用Java进行Flink开发 3.2 使用Scala进行Flink开发 4. 关键性能和优化 4.1 性能对比 …...

C++STL专题 vector底层实现

目录 一&#xff0c; vector的手搓 1.构造函数 2. 拷贝构造的实现 3.析构函数 4.begin() end() 的实现 5.reserve的实现 6.size和capacity的实现 7.push_back的实现 8.pop_back的实现 9.empty的实现 10.insert的实现 11.erase的实现 12.resize的实现 13.clear的实…...

【Linux】装机常用配置

文章目录 1. 下载常用软件包2. 更新yum源3. vim编辑器配置4. 安装C语言和C的静态库&#xff08;换root&#xff09;5. git6. sudo给普通用户提权7. 更新git版本&#xff08;centos默认安装1.8.x&#xff0c;我们更新到2.x&#xff09;8. getch9. json10. 升级gcc版本11. 跨系统…...

oracle库PASSWORD_VERSIONS 对应的加密方式

oracle库PASSWORD_VERSIONS 对应的加密方式 10G DES 11G SHA-1 12C SHA-2-based SHA-512官方文档&#xff1a; https://docs.oracle.com/database/121/DBSEG/authentication.htm#DBSEG487...

分享一个基于微信小程序的乡村医疗上门服务预约平台(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…...

切香肠(Sausage)

题目描述 有 n 条香肠&#xff0c;每条香肠的长度相等。我们打算将这些香肠切开后分给 k 名客人&#xff0c;且要求每名客人获得一样多的香肠&#xff0c;且要将所有的香肠分配完&#xff0c;不做保留。 请问最少需要切几刀才能完成&#xff1f;一刀只能切断一条香肠&#xf…...

Session与Cookie以及Cache区别,及应用场景

Session、Cookie和Cache是Web开发中常用的数据存储方式&#xff0c;它们在功能、存储位置和应用场景上有所不同。 一、Session、Cookie和Cache的区别 Session 存储位置&#xff1a;服务器端。功能&#xff1a;通过在服务器上存储唯一的标识符&#xff08;Session ID&#xff…...

Debian | 更换 Gnome 至 Xfce4

Debian | 更换 Gnome 至 Xfce4 更新源 sudo apt update && sudo apt upgrade安装 xfce4 sudo apt install xfce4我选择 lightdm&#xff0c;回车 切换桌面 sudo update-alternatives --config x-session-manager输入 xfce 所在序号&#xff0c;我这里是 3 卸载 …...

在使用JSON过程中遇到的一个空间释放问题

在对完成的模块进行空间访问检查中发现了这个问题&#xff0c;这刚开始接触JSON的使用&#xff0c;也不知道他的内部实现&#xff0c;因此该问题找了好久&#xff0c;终于发现是每个节点创建都会自动开辟空间&#xff0c;因此造成空间未成功释放的错误。 JSON未成功替换节点空间…...

基于ThinkPHP开发的校园跑腿社区小程序系统源码,包含前后端代码

基于ThinkPHP开发的校园跑腿社区小程序系统源码&#xff0c;包含前后端代码 最新独立版校园跑腿校园社区小程序系统源码 | 附教程 测试环境&#xff1a;NginxPHP7.2MySQL5.6 多校版本&#xff0c;多模块&#xff0c;适合跑腿&#xff0c;外卖&#xff0c;表白&#xff0c;二…...

不同专业方向如何在ChatGPT的帮助下完成选题

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 选择一个合适的论文题目是每个论文写作同学必须面对的重要任务。无论是历史专业、计算机科学专业&#xff0c;还是其他各个领域&#xff0c;找到一个既有研究价值又符合个人兴趣的选题往…...

MathType7.4中文版本功能详解!你的数学公式编辑神器

嘿&#xff0c;亲爱的小伙伴们&#xff0c;今天我要跟大家分享一个超实用的工具——MathType7中文版。作为一个自媒体人&#xff0c;我常常需要编辑各种复杂的数学公式&#xff0c;而这款软件简直就是我的救星&#xff01;接下来&#xff0c;就让我带你们领略一下它的神奇之处吧…...

在 PhpStorm 中为 .java 文件启用语法高亮,需要正确配置文件类型和关联语言。

点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com 因为我同时使用java和php混编所以在一个项目中如果同时打开IntelliJ IDEA和PhpStorm不符合我完美主义的本性。 捣鼓了一下搞定了 1. 添加文件类型关联 将 .java 文件与 Java 语言支持关联&#xff1a; …...

2024年8月1日(前端服务器的配置以及tomcat环境的配置)

[rootstatic ~]# cd eleme_web/ [rootstatic eleme_web]# cd src/ [rootstatic src]# ls views/ AboutView.vue HomeView.vue [rootstatic src]# vim views/HomeView.vue [rootstatic src]# nohup npm run serve nohup: 忽略输入并把输出追加到"nohup.out" 构建项目…...

基于tcp,html,数据库的在线信息查询系统项目总结

1.项目背景 在线信息查询系统是一种可用于检索和展示各种信息的计算机程序或平台。主要特点包括&#xff1a; 用户接口&#xff1a;通常提供友好的界面&#xff0c;用户可以方便地输入查询条件。 数据存储&#xff1a;系统往往连接到数据库&#xff0c;存储大量信息&#xf…...

P1032 [NOIP2002 提高组] 字串变换

[NOIP2002 提高组] 字串变换 题目背景 本题不保证存在靠谱的多项式复杂度的做法。测试数据非常的水&#xff0c;各种做法都可以通过&#xff0c;不代表算法正确。因此本题题目和数据仅供参考。 本题为搜索题&#xff0c;本题不接受 hack 数据。关于此类题目的详细内容 题目…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...

ffmpeg(三):处理原始数据命令

FFmpeg 可以直接处理原始音频和视频数据&#xff08;Raw PCM、YUV 等&#xff09;&#xff0c;常见场景包括&#xff1a; 将原始 YUV 图像编码为 H.264 视频将 PCM 音频编码为 AAC 或 MP3对原始音视频数据进行封装&#xff08;如封装为 MP4、TS&#xff09; 处理原始 YUV 视频…...