C/C++入门005-C语言数组

news2024/11/25 12:32:56

文章目录

  • C语言数组
    • 数组的基本概念及定义
      • 数组定义
      • 数组中的几个名词
        • 数组长度计算方法
        • 二维数组的含义
        • 二维数组的定义
        • 字符数组
        • 字符函数
          • 1. strlen 计算字符串长度
          • 2. strcpy 字符串拷贝
          • 3. strcat 字符串追加
          • 4. strcmp 字符串比较
          • 1. strncpy 字符串拷贝
          • 3. strncmp 字符串比较
          • 4. strstr 在字符串中查找另一字符串
          • 5. strtok 切割字符串
          • 6. strerror 解析错误码
          • perror 解析错误码,打印信息
          • 字符操作函数

参考:https://blog.csdn.net/weixin_44617968/article/details/117656810

C语言数组

数组的基本概念及定义

数组定义

数组,从字面上看,就是一组具有相同类型的数据,在C语言中,数组属于构造数据类型。

数组中的几个名词

int 为类型标识
arr 为变量名称
[10] 表示数组大小
{1,2,3} 表示初始化
如果初始化长度和定义时长度不一致,后面的默认为0

案例代码:

 //    int arr[10];
    int arr[5] = {1,2,3}; // 定义并初始化数组
    for(int i =0; i<5;i++)
    {
        printf("%d \n",arr[i]); //输出下标对应的数组
    }

    for(int i =0; i<5;i++)
    {
        printf("%d \n",&arr[i]);
    }

        for(int i =0; i<5;i++)
    {
        printf("%p \n",&arr[i]);// 输出内存地址
    }

输出为:
在这里插入图片描述

数组长度计算方法

因为数组在内存中占用的字节数取决于其存储的数据类型和数据的个数

数组所占用存储空间 = 一个元素所占用存储空间 * 元素个数(数组长度)
所以计算数组长度可以使用如下方法
数组的长度 = 数组占用的总字节数 / 数组元素占用的字节数

案例代码:

int ages[4] = {19, 22, 33, 13};
int length =  sizeof(ages)/sizeof(int);
printf("length = %d", length);

输出结果: 4

二维数组的含义

二维数组包含行列,先行后列

    int m = 5;
    int n = 6;
    int arr[5][6];
    for(int i =0 ; i <m; i++)
    {
        for (int j =0;j<n;j++)
        {
            printf("%d-%d\t",i,j);
            arr[i][j] = 1;
        }
        printf("\n");
    }

    for(int i = 0 ;i <5;i++)
    {
        printf("%d",arr[i][2]);
    }

输出为:
在这里插入图片描述

二维数组的定义

    int arr1[5][6];
    int arr2[2][3] = {
      {1,2,3},
      {3,2,1}
    };
    int arr3[2][3] = {{1,2,3},{3,2,1}};
    //int arr4[][3]; //D:\cplusproject\数组\main.c|15|error: array size missing in 'arr4'|
    //int arr5[2][];//D:\cplusproject\数组\main.c|16|error: array type has incomplete element type 'int[]'|
    int arr6[][3]={1,2,3,4,5,6,7}; //3行3列 按照行去赋值

    int nums = sizeof(arr6)/sizeof(int); //nums表示有多少个元素
    int rows = nums/3; //rows表示有多少行

    printf("当前的二维数组有 %d 行 %d 个元素\n",rows,nums);

    for(int i = 0;i<rows;i++)
    {
        for(int j = 0;j <3 ;j++)
        {
            printf("%d \t",arr6[i][j]);
        }
        printf("\n");
    }

输出为:
在这里插入图片描述

字符数组

char c[] ={'I',' ','a','m','\0','h','a','p','p','y'};   // c[0]--c[9]   ----c[10]  但是这里没有 \0 ,就可能会导致乱码

printf("%d \n",sizeof(c)/sizeof(char));

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

输出为:
在这里插入图片描述

字符函数

参考:C语言字符函数

无字符串长度限制的字符串函数
            1. strlen 计算字符串长度
            2. strcpy 字符串拷贝
            3. strcat 字符串追加
            4. strcmp 字符串比较
有字符串长度限制的字符串函数
            1. strncpy 字符串拷贝
            2. strncat 字符串追加
            3. strncmp 字符串比较
            4. strstr 在字符串中查找另一字符串
            5. strtok 切割字符串
            6. strerror 解析错误码
    perror 解析错误码,打印信息
字符操作函数
        1. `isdigit` 判断是否是数字字符
        2. islower 判断是否是小写字符
字符转换函
        tolower 字符转小写
        toupper 字符转大写
1. strlen 计算字符串长度

strlen 函数的参数

size_t strlen ( const char * str );

strlne 是计算字符 ‘\0’ 之前所有字符的的个数,不包括 \0
strlen 的函数返回值是 unsigned int 类型,无符号整形
strlen 的参数指向的字符串的结尾必须包涵 \0,字符串是以 \0作为结束标志
strlen 的使用方法

2. strcpy 字符串拷贝

strcpy 函数的参数

char* strcpy(char * destination, const char * source );

strcpy 字符串拷贝的源字符串必须以 \0 为结束标志
strcpy 会将源字符串中的 ‘\0’ 拷贝到目标空间中
拷贝的目标空间必须足够大,拷贝后能够存放字符串
strcpy 拷贝的字符串必须是可改变的,不能是常量字符串
strcpy 函数的使用
strcpy 里的第一个参数是拷贝的目标空间,第二个参数是拷贝的内容

3. strcat 字符串追加

strcat 函数的参数

char * strcat ( char * destination, const char * source );

strcat 字符串追加,是在字符串 A 后面在追加一个字符串 B
strcat 的源字符串必须以 \0 为结束标志
strcat 的被追加的空间必须能够存放的下追加的字符串
strcat 的源字符串必须是可改变的,不能是常量字符串
strcat 函数的使用

strcat(arr, arr2);
//strcat 函数追加会把 arr2 的所有字符串拷贝到arr1里,包括\0

arr2拷贝时会把arr1 里的\0 覆盖,所以 strcat 函数不能 字符串A 追加 字符串A

4. strcmp 字符串比较

strcmp 函数的参数

int strcmp ( const char * str1, const char * str2 );

strcmp函数的判断标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

strcmp 是比较每个字符串的第一个字符, 如果相等,
则继续比较下一对字符,直到字符不相等或到达终止空字符

有字符串长度限制的字符串函数

1. strncpy 字符串拷贝

strncpy 函数的参数

char * strncpy ( char * destination, const char * source, size_t num );

strncpy 和 strcpy 函数的使用方法都差不多,只是多了一个参数 size_t num
多出来的参数是来限制字符串拷贝的长度,增加了安全性
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加\0,直到num个

  1. strncat 字符串追加
    strncat 函数参数
char * strncat ( char * destination, const char * source, size_t num );

和 strcat 函数使用的方法和规则都差不多,只是多了一个参数 size_t num
num 这个参数代表需要追加几个字符串
strncat 函数使用

3. strncmp 字符串比较

strncmp 函数参数

int strncmp ( const char * str1, const char * str2, size_t num );

规则和 strcmp 同上
多出来的一个参数是用来要比较字符串的个数
strncmp 函数使用
比较3个字符串的大小

4. strstr 在字符串中查找另一字符串

strstr 函数参数

char * strstr ( const char *str1, const char * str2);

作用:在A 字符串中查找是否包含 B字符串
如果 A 中包含 B ,则返回 B 在 A 中首次出现的的地址。
否则返回空指针!
如果找到,返回的是字符串的地址,所以要用指针变量来接收

5. strtok 切割字符串

strtok 函数参数

char * strtok ( char * str, const char * sep );

第一个参数是一个字符串,它包含了0个或者多个字符
第二个参数是分割字符串,对第一个参数的字符串扫描,碰到了分割字符串中的任意一个
就把那个字符标记成 ‘\0’ ,然后返回分割字符串之前的地址,并且保存它在字符串中的位置
strtok函数第二次查找的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记
如果字符串中不存在更多的分割字符,则返回 NULL 指针。
strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改

6. strerror 解析错误码

strerror 函数参数

char * strerror ( int errnum );

在使用库函数的时候,调用库函数失败时,都会设置错误码
C语言中有一个全局变量叫 errno,只要调用库函数发生错误,就会把错误码放到errno里
strerror 会把错误码翻译成对应的错误信息
使用必须包涵头文件 <errno.h>
srerror的使用
返回的都是对应的错误信息

perror 解析错误码,打印信息

perror 函数参数

void perror(const char* str);

perror 的头文件是 <stdio.h>
perror 和 strerror 作用都是一样的,不过strerror 没有打印
perror 是把错误码转换成错误信息,在打印

字符操作函数

函数名 如果参数符合下列条件就返回真(非0的数字)
iscntrl 任何控制字符
isspace 空白字符:空格‘ ’,换页‘\f’,换行’\n’,回车‘\r’,制表符’\t’或者垂直制表符’\v’
isdigit 十进制数字 0~9
sxdigit 十六进制数字,包括所有十进制数字,小写字母a ~ f,大写字母A ~ F
islower 小写字母a~z
isupper 大写字母A~Z
isalpha 字母 a ~ z 或大写字符 A - Z
salnum 字母或者数字,az,AZ,0~9
ispunct 标点符号,任何不属于数字或者字母的图形字符(可打印)
isgraph 任何图形字符
isprint 任何可打印字符,包括图形字符和空白字符
以上函数的头文件:<ctype.h>
函数使用示范:

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

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

相关文章

【web安全】——web渗透的前缀知识

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门 创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座…

海康摄像头CVE-2021-36260漏洞复现

海康摄像头CVE-2021-36260漏洞复现1.漏洞介绍2.手动测试2.1.摄像头版本2.2.漏洞复现2.2.1.更改URL2.2.2.抓包修改数据2.2.3.更换请求路径2.2.4.后期利用3.POC测试3.1.下载POC3.2.运行POC3.3.测试漏洞3.4.执行命令1.漏洞介绍 攻击者利用该漏洞可以用无限制的 root shell 来完全控…

Internet Download Manager6.41加速器最快的电脑工具下载器

IDM下载器&#xff0c;全称是Internet Download Manager&#xff0c;中文是互联网下载管理器可以说是最好用下载速度最快的下载器&#xff0c;可以利用全部带宽多线程下载&#xff0c;让你的下载速度起飞&#xff01; 提到下载工具&#xff0c;大多数国人映入脑海的或许是迅雷…

优雅应对故障:QQ音乐怎么做高可用架构体系?

导语 | 故障是开发者高频关注的问题。在分布式系统建设的过程中&#xff0c;我们思考的重点不是避免故障&#xff0c;而是拥抱故障&#xff0c;通过构建高可用架构体系来获得优雅应对故障的能力。本文作者冯煦亮从架构、工具链、可观测三个维度&#xff0c;介绍了QQ音乐多年来积…

迅速配置hadoop Xshell 会话(安装java和jdk)

安装 yum install -y epel-release 防火墙 systemctl stop firewalld systemctl disable firewalld.service root权限 vim /etc/sudoers yy p 创建文件夹 mkdir /opt/module mkdir /opt/software chown hhh:hhh /opt/module/ chown hhh:hhh /opt/software/ cd /opt/ ll 卸…

shell第六天练习

正则表达式练习题&#xff1a; 1、显示/etc/rc.d/rc.sysinit文件中以不区分大小的h开头的行&#xff1b; 2、显示/etc/passwd中以sh结尾的行; 3、显示/etc/fstab中以#开头&#xff0c;且后面跟一个或多个空白字符&#xff0c;而后又跟了任意非空白字符的行&#xff1b; 4、查找…

2023年AI十大展望:GPT-4领衔大模型变革,谷歌拉响警报,训练数据告急

新年伊始&#xff0c;大模型的话题热度不减。2022年11月底&#xff0c;ChatGPT展现的惊人能力将大模型研究和应用热度推向高潮&#xff0c;人们激烈讨论着这个高级“物种”的推出意味着什么&#xff0c;比如是否会颠覆搜索引擎市场格局。踏入2023年&#xff0c;这不禁让我们对G…

2、可观测性--数据源

文章目录监控数据来源端上访问应用程序业务监控基础设施可观测性核心概念日志&#xff08;Logging&#xff09;统计指标&#xff08;Metrics&#xff09;链路追踪&#xff08;Tracing&#xff09;三者之间关系监控数据来源 我们一般讲的数据观测&#xff0c;其实观测的就是从发…

(Java高级教程)第三章Java网络编程-第二节:套接字(Socket)编程基本概述

文章目录一&#xff1a;网络编程相关概念&#xff08;1&#xff09;什么是网络编程&#xff08;2&#xff09;网络编程中的相关概念①&#xff1a;发送端和接收端②&#xff1a;请求和响应③&#xff1a;服务端和客户端二&#xff1a;TCP和UDP&#xff08;1&#xff09;TCP&…

nVisual自动计算线缆长度

nVisual创建线缆后&#xff0c;需要对线缆长度进行计算&#xff0c;比如室外场景下光缆长度的测量及室内综合布线长度测量。nVisual可实现线缆生成后自动线缆长度的计算和手动测量线缆长度。本章将介绍测量长度接口的具体实现思路及接口调用。 一、计算原理 1.区分场景 nVis…

基于 Log 的通用增量 Checkpoint​

摘要&#xff1a;本文整理自 Apache Flink Contributor 俞航翔 9 月 24 日在 Apache Flink Meetup 的分享。主要内容包括&#xff1a;Checkpoint 性能优化之路解析 Changelog一览 State/Checkpoint 优化Tips&#xff1a;点击「阅读原文」查看原文视频&演讲 ppt01Checkpoint…

nodejs+npm的安装与配置

下载与安装下载点击_Node.js中文网_根据自身系统进行下载即可&#xff08;建议下载10版本的&#xff0c;尽量不要下最新版本的&#xff09;配置nodejs相关配置简介&#xff1a;Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;让JavaScript 运行在服务端的开发…

如何理解「异或(XOR)」运算在计算机科学中的重要性

前言 在学逻辑学的时候&#xff0c;基本的逻辑运算是非、与、或&#xff0c;且并没有得到特别的强调&#xff0c;而且事实上异或可以由这三个逻辑运算符表出。可是在计算机领域&#xff0c;异或似乎处于与非、与、或并列的关系&#xff0c;例如 C 语言的位运算符中就有专门的异…

pmp考试需要注意哪些?

注意的事情还是蛮多的&#xff0c;所以这里总结一个关于考试注意的点 先来分享一些总结的考试经验&#xff1a; 1、规划好时间&#xff1a;答题时间、填答题卡时间、检查时间&#xff0c;一般来说一道题答题时间和填答题卡的时间最好在一分钟左右&#xff0c;个别的题不能超过…

8.0、Linux-账号管理学习

8.0、Linux-账号管理学习 账号管理 - 简介 Linux 系统是一个多用户多任务的分时操作系统&#xff0c;任何一个要使用系统的用户&#xff0c;都必须首先向系统的管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统&#xff1b; 用户的账号一方面可以帮助系统管理员对使…

第一次设计产品logo需要注意的5点细节

对于每一个公司企业/产品来说&#xff0c;logo不仅是公司品牌的代表&#xff0c;也是影响公司运营和宣传的关键因素。为了充分发挥公司标志的作用&#xff0c;在企业成立之初就要把企业标志的设计作为一项重要工作来抓&#xff0c;以保证标志最终发挥积极作用。为了使标志设计符…

useEffect和useLayoutEffect的区别

使用方式 这两个函数的使用方式其实非常简单&#xff0c;他们都接受一个函数一个数组&#xff0c;只有在数组里面的值改变的情况下才会再次执行 effect。 差异 useEffect 是异步执行的&#xff0c;而useLayoutEffect是同步执行的。useEffect 的执行时机是浏览器完成渲染之后&…

修复被删除的数据库表

1.问题来源 有一天领导让我对比生产数据库表和测试数据库表&#xff0c;要确保表结构&#xff0c;字段类型一致。于是我导出测试环境数据库表的DDL&#xff0c;在导出表的时候有blob和clob的表报错&#xff0c;于是我就想把它给剔除再导出&#xff0c;就这样数据库表被我删掉了…

c++调python踩坑日志

目录 import_array();报错 矩阵互相转换 #include numpy相关vs2019配置 import_array();报错 参考&#xff1a;https://blog.csdn.net/weixin_40232401/article/details/106944336#:~:text%E5%9C%A8,import_array%20%28%29%E5%87%BA%E7%8E%B0%E6%8A%A5%E9%94%99%EF%BC%8C%E6…

renix如何查看时延和抖动和丢包——网络测试仪实操

目录 查看时延和抖动​ 一、预约测试资源 ​ 二、新建流​ 三、查看时延和抖动​ 查看丢包​ 一、预约端口​ 二、创建Raw流​ 三、如何查看流量的实时丢包个数和丢包比例​ 查看时延和抖动​ 一、预约测试资源 ​ 打开Renix软件&#xff0c;连接机箱, 预约端口​ 二…