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语言——二维数组和字符数组
二维数组 二维数组本质上是一个行列式的组合,也就是二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。 定义形式: 类型(说明符) 数组名[行数(常量表达式1)][列数(常量表达式…...
Python 爬虫入门(九):Scrapy安装及使用「详细介绍」
Python 爬虫入门(九):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中修改项目名称
公司最近有个小项目新加了很多功能,在叫原先的项目名有点不合适了。所以在网上查了下资料,发现步骤都比较复杂。自己研究了一下找到了一个相对简单的方法,只需要两步,特此记录一下。 1.修改项目文件夹名称 关闭当前项目ÿ…...
Flink开发语言使用Java还是Scala合适?
目录 1. Flink简介 1.1 什么是Apache Flink? 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底层实现
目录 一, 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的静态库(换root)5. git6. sudo给普通用户提权7. 更新git版本(centos默认安装1.8.x,我们更新到2.x)8. getch9. json10. 升级gcc版本11. 跨系统…...
oracle库PASSWORD_VERSIONS 对应的加密方式
oracle库PASSWORD_VERSIONS 对应的加密方式 10G DES 11G SHA-1 12C SHA-2-based SHA-512官方文档: https://docs.oracle.com/database/121/DBSEG/authentication.htm#DBSEG487...
分享一个基于微信小程序的乡村医疗上门服务预约平台(源码、调试、LW、开题、PPT)
💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…...
切香肠(Sausage)
题目描述 有 n 条香肠,每条香肠的长度相等。我们打算将这些香肠切开后分给 k 名客人,且要求每名客人获得一样多的香肠,且要将所有的香肠分配完,不做保留。 请问最少需要切几刀才能完成?一刀只能切断一条香肠…...
Session与Cookie以及Cache区别,及应用场景
Session、Cookie和Cache是Web开发中常用的数据存储方式,它们在功能、存储位置和应用场景上有所不同。 一、Session、Cookie和Cache的区别 Session 存储位置:服务器端。功能:通过在服务器上存储唯一的标识符(Session IDÿ…...
Debian | 更换 Gnome 至 Xfce4
Debian | 更换 Gnome 至 Xfce4 更新源 sudo apt update && sudo apt upgrade安装 xfce4 sudo apt install xfce4我选择 lightdm,回车 切换桌面 sudo update-alternatives --config x-session-manager输入 xfce 所在序号,我这里是 3 卸载 …...
在使用JSON过程中遇到的一个空间释放问题
在对完成的模块进行空间访问检查中发现了这个问题,这刚开始接触JSON的使用,也不知道他的内部实现,因此该问题找了好久,终于发现是每个节点创建都会自动开辟空间,因此造成空间未成功释放的错误。 JSON未成功替换节点空间…...
基于ThinkPHP开发的校园跑腿社区小程序系统源码,包含前后端代码
基于ThinkPHP开发的校园跑腿社区小程序系统源码,包含前后端代码 最新独立版校园跑腿校园社区小程序系统源码 | 附教程 测试环境:NginxPHP7.2MySQL5.6 多校版本,多模块,适合跑腿,外卖,表白,二…...
不同专业方向如何在ChatGPT的帮助下完成选题
学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 选择一个合适的论文题目是每个论文写作同学必须面对的重要任务。无论是历史专业、计算机科学专业,还是其他各个领域,找到一个既有研究价值又符合个人兴趣的选题往…...
MathType7.4中文版本功能详解!你的数学公式编辑神器
嘿,亲爱的小伙伴们,今天我要跟大家分享一个超实用的工具——MathType7中文版。作为一个自媒体人,我常常需要编辑各种复杂的数学公式,而这款软件简直就是我的救星!接下来,就让我带你们领略一下它的神奇之处吧…...
在 PhpStorm 中为 .java 文件启用语法高亮,需要正确配置文件类型和关联语言。
点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com 因为我同时使用java和php混编所以在一个项目中如果同时打开IntelliJ IDEA和PhpStorm不符合我完美主义的本性。 捣鼓了一下搞定了 1. 添加文件类型关联 将 .java 文件与 Java 语言支持关联: …...
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.项目背景 在线信息查询系统是一种可用于检索和展示各种信息的计算机程序或平台。主要特点包括: 用户接口:通常提供友好的界面,用户可以方便地输入查询条件。 数据存储:系统往往连接到数据库,存储大量信息…...
P1032 [NOIP2002 提高组] 字串变换
[NOIP2002 提高组] 字串变换 题目背景 本题不保证存在靠谱的多项式复杂度的做法。测试数据非常的水,各种做法都可以通过,不代表算法正确。因此本题题目和数据仅供参考。 本题为搜索题,本题不接受 hack 数据。关于此类题目的详细内容 题目…...
TwinCAT3 安装避坑与项目兼容性实战指南
1. TwinCAT3安装前的版本匹配策略 第一次装TwinCAT3时,我像大多数工程师一样直接下载最新版本开干,结果打开老项目时直接弹窗报错。后来才发现,TwinCAT3的版本兼容性问题比想象中复杂得多。这里分享几个血泪教训: 版本号玄学不是开…...
从PCI到PCIe:一次Read请求的‘分家’之旅,以及超时机制为何成了‘必要之恶’
从PCI到PCIe:一次Read请求的‘分家’之旅,以及超时机制为何成了‘必要之恶’ 在计算机体系结构的演进长河中,总线协议的设计始终面临着效率与可靠性的永恒博弈。想象一下,当CPU需要从外设读取数据时,如果必须像排队买奶…...
嵌入式AI边缘部署雏形:STM32与PyTorch服务器协同的物体识别系统设计
嵌入式AI边缘部署雏形:STM32与PyTorch服务器协同的物体识别系统设计 1. 引言:当单片机遇上AI服务器 想象一下这样的场景:一个巴掌大的STM32开发板通过摄像头捕捉图像,瞬间将画面传送到云端服务器进行AI分析,再根据识…...
AI的影响5
AI帮我选了午餐、回了邮件、定了行程——那我还剩什么?前两天,我发现自己陷入了一种奇怪的状态。早晨,AI帮我排好了今天的优先级。中午,AI根据冰箱存货推荐了午餐。下午,AI替我润色了工作消息。晚上,AI还帮…...
2026年英文论文AIGC检测不通过?5款降AI工具横评哪个最值
英文论文的AIGC检测越来越严了。今年有两个室友都被期刊退稿,理由一模一样:AI-generated content detected。一个用Turnitin,一个用iThenticate,工具不同,结果都没过。 我帮他们研究了一圈,横评了几款降AI…...
Kimi-VL-A3B-Thinking多模态推理教程:支持LaTeX公式图像识别与解析
Kimi-VL-A3B-Thinking多模态推理教程:支持LaTeX公式图像识别与解析 1. 快速了解Kimi-VL-A3B-Thinking Kimi-VL-A3B-Thinking是一款高效的开源混合专家视觉语言模型,专注于多模态推理任务。这个模型特别擅长处理包含数学公式的图像识别与解析࿰…...
高温高压蒸汽测量|涡街蒸汽流量计选型干货
涡街蒸汽流量计广泛应用于电厂、化工、热电联产等核心工业场景,科学选型涡街蒸汽流量计,是保障高温高压蒸汽计量精准、运维高效的核心前提。高温高压蒸汽工况下,涡街流量计选型需紧扣 4 大核心干货要点,规避选型误区:匹…...
人形机器人行业日报:量产真的开始了,家庭服务机器人也开始抢跑
人形机器人行业日报:量产真的开始了,家庭服务机器人也开始抢跑 今天这波新闻不算多,但有两条还挺值得看。 一个关键词是量产。过去大家看人形机器人,更多还是看 demo、看跳舞、看翻跟头。现在不一样了,行业开始拿出更…...
AI原生研发不是“加AI”,而是重构研发DNA(SITS2026白皮书核心框架首次解密)
第一章:什么是AI原生软件研发?SITS2026给你答案 2026奇点智能技术大会(https://ml-summit.org) AI原生软件研发不是对传统开发流程的简单增强,而是以大模型为第一公民、以提示工程与推理编排为基本范式、以LLM-as-OS架构为底层支撑的全新研发…...
OBS StreamFX插件深度解析:12个高级特效实现原理与实战指南
OBS StreamFX插件深度解析:12个高级特效实现原理与实战指南 【免费下载链接】obs-StreamFX StreamFX is a plugin for OBS Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even …...
