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 数据。关于此类题目的详细内容 题目…...
Qwen3.5-4B-Claude-Opus开源大模型教程:Web镜像安全配置最佳实践
Qwen3.5-4B-Claude-Opus开源大模型教程:Web镜像安全配置最佳实践 1. 模型与镜像概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B的推理蒸馏模型,特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。该版本以…...
Emotion2Vec+语音情感识别实战:用AI给你的语音“把把脉”
Emotion2Vec语音情感识别实战:用AI给你的语音"把把脉" 1. 语音情感识别技术概述 语音情感识别(Speech Emotion Recognition, SER)作为人机交互领域的重要技术,正在深刻改变我们与机器沟通的方式。这项技术通过分析语音…...
用Python+OpenCV实现双目深度估计:从标定到3D重建全流程踩坑记录
用PythonOpenCV实现双目深度估计:从标定到3D重建全流程实战指南 当你第一次尝试用双目相机生成三维点云时,是否遇到过这些问题:标定误差导致深度图出现断层?弱纹理区域匹配结果一片模糊?视差图转点云时坐标错乱&#x…...
RWKV7-1.5B-G1A模型网络通信优化与协议设计
RWKV7-1.5B-G1A模型网络通信优化与协议设计 1. 为什么需要网络层优化 大模型服务在实际部署中,网络通信往往成为性能瓶颈。我们测试发现,RWKV7-1.5B-G1A模型在本地推理时平均响应时间为120ms,但通过网络API调用时延迟飙升至450ms以上。这种…...
ZTE ONU工厂模式解锁:3个关键步骤告别运维困境
ZTE ONU工厂模式解锁:3个关键步骤告别运维困境 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu zteOnu是一款专为网络运维工程师设计的专业工具,能够快速解锁ZTE…...
macOS 强制运行拦截程序
当你从 Chrome、Safari 或其它网络渠道下载文件时,macOS 会自动给这个文件贴上一张“隐形贴纸”,名字就叫 com.apple.quarantine。系统的逻辑: 当你双击运行一个文件时,系统的 Gatekeeper会先检查有没有这张贴纸。拦截逻辑&#x…...
CogVideoX-2b镜像避坑指南:解决显存溢出、黑屏等常见问题
CogVideoX-2b镜像避坑指南:解决显存溢出、黑屏等常见问题 1. 为什么你需要这份避坑指南 当你第一次尝试使用CogVideoX-2b生成视频时,可能会遇到各种意外情况:显存突然爆满、生成的视频全是黑屏、或者等待了十分钟却没有任何输出。这些问题不…...
局域网视频软件BeeWorks Meet
对于必须在内网进行高清视频沟通的场景,BeeWorks Meet 是一款定位清晰、功能全面的私有化视频会议解决方案。它最大的特点在于,能将所有会议数据都安全地保留在企业内部网络,让企业对自己的核心会议内容拥有完全的自主权。📌 BeeW…...
Flux.1-Dev深海幻境助力学术研究:为论文生成假设验证过程的可视化图表
Flux.1-Dev深海幻境助力学术研究:为论文生成假设验证过程的可视化图表 1. 引言 写论文最头疼的环节是什么?对很多理工科的研究者来说,可能不是实验,也不是数据分析,而是如何把脑子里那个复杂的理论模型或验证过程&am…...
避坑指南:uniapp中使用uni.requestPayment实现支付宝沙箱支付的完整流程
Uniapp支付宝沙箱支付全流程实战:从环境搭建到避坑指南 第一次在Uniapp中集成支付宝支付功能时,我盯着控制台反复出现的"商家订单参数异常"错误提示整整两天。作为一个从微信生态转战支付宝平台的开发者,本以为支付接口的调用都是…...
