c语言的数组

news2025/7/8 5:57:12

#在这一篇中介绍三个数组

1.一维数组  2.字符数组  3.二维数组

1.一维数组

数组的定义:

类型 数组名[元素个数] ----这个为数组的定义

#include <stdio.h>
int main() {
    
    int a[4];//在这里,我定义了一个只能装载4个整数类型元素的数组

    char b[5];//在这里,定义一个只能装载5个字符类型元素的数组

    return 0;
}

Tips:数组是不可以动态定义的,也就是说元素个数那里必须使用的是常量来定义大小,如果使用定义为整型的变量,例如;int a[n]; //这里会报错,定义要求就是为常量,不可使用变量

接下来就是如何访问数组中的元素:

>>方式: 数组名[下标]

a[0]; // 访问a数组中的第一个元素
b[1]; // 访问b数组中的第二个元素
c[5]; // 访问c数组中的第六个元素

/*注意,第一个数的下标为0,从0开始的*/
//注意
int a[5]; // 创建一个具有五个元素的数组
a[0]; // 访问第一个元素的下标是0,不是1
a[5]; // 报错,因为第五个元素的下标是a[4]

这里便是数值的基本定义。

在c中,循环总是与数组一同出现,因为我们总是需要使用循环来访问数组。举一个例子。

int a[10]; // 定义一个容量为10的整数型数值
for (i = 0; i < 10; i++) {
    a[i] = i;
}

一般将计算器的初始值为0,为了避免越界访问从而程序报错。

数值的初始化---在数值定义的时候并且赋值。

//数组的初始化

//将数组中的所有元素初始化为0
int a[10] = {0}; // 事实上这里只是将第一个元素赋值为0

//如果是赋予不同的值,那么用逗号分隔开即可;
int a[10] = {1,2,3,4,5,6,7,8,9,10};

//可以只给一部分元素赋值,未赋值的元素自动初始化为0
int a[10] = {1,2,3,4,5,6};

//还可以指定定义,但是在微软的vs code里面好像不可以
int a[10] = {[2] = 2,[5] = 5, [9] = 9};

以及sizeof()---这个函数用于计算大小;若变量为字符串则计算字符个数;若变量为整数,计算所占空间大小。

以上,就是数组的基本操作

二.字符数组

在c语言中,是没有字符串这个量的(在python中有,叫做string)

所以,我们通过字符数组来实现字符串,直接定义是初始化数组

例如:

int main() {
    //初始化字符数组的每个元素
    char str1[10] = {'i', 'l','o','v','e'};
    
    //可以不写元素的个数,因为编译器会自动计算
    char str3[] = {'F','i','s','h','c','\0'};
    
    // 使用字符串常量初始化字符数组
    char str4[] = {"ilove"};
    
    // 使用字符串常量初始化,可以省略大括号
    char str5[] = "ilove";

    return 0;
}

然后,我们获得了字符数组,我们还有一些方法去使用这个字符数组。

例如:

获取字符串的长度:strlen

注意:size_t被定义与stddef.h头文件中,它事实上就是无符号整型(unsigned int)---%u

使用格式化符号,不包括"n"不算入数中

#include <stdio.h>
#include <string.h>
int main(){

    char a[] = "iloveu\n";
    
    printf("这个字符串的个数是:%d", sizeof(a));

    printf("这个字符串的字符数是:%u", strlen(a));

//可以发现,它们的输出个数不一样。第一个是7,而第二个是6

    return 0;
}

因为strlen不会将"\n"算入字符串的个数中去。

拷贝字符串:strcpy和strncpy

/*strcpy(目标数组,原数组);

将原数组的值赋予给了目标数组,其中目标数组的容量一定要大于等于原数组,否则赋值时会报错;
它把原数组背后的结束符; 也拷贝进去了,看到这个结束符时,便自动结束
  

其次,原数组也可以改为字符串。*/

#include <stdio.h>
#include <string.h>
int main()
{
	char str1[] = "original string";
	char str2[] = "New string";
	char str3[100];


	strcpy(str1, str2);
	strcpy(str3, "copy Successful");

	printf("str1: %s\n", str1);// 结果为New strimg
	printf("str2: %s\n", str2);
	printf("str3: %s\n", str3);

	return 0;
}

对于 ---strncpy()来讲

#include <stdio.h>
#include <string.h>
int main()
{
	char str1[] = "to be or not to be";
	char str2[] = "New string";
	char str3[100];

	strncpy(str2, str1, 5);
	str2[5] = '\0';// \0是结束符号的格式化

	printf("str2: %s\n", str2);



	return 0;
}
/*strncpy可以限制复制的字符个数
strncpy(目标数组,原数组,限制的个数(int))*/
//记住一定要在添加上一个结束符
//str2[5] = '\0';// \0是结束符号的格式化
//限制多少,就在相应的地方加上

对于后续的方法,其实使用方法都与这些类似,只是输出结果不一样

链接字符串:strcat和strncat

strcat(目标数组,原数组/字符串)

比较字符串:strcmp和strncmp

strcmp(目标数组,原数组/字符串)

0为false , 1为True

比较的数组若相等时---则返回0即False

#include <stdio.h>
#include <string.h>
int main() {
    
    char a[] = "iloveu";
    char b[] = "iloveu";
    
    if (!strcmp(a,b)) {
        printf("这两个字符数组相等");
    }
    else {
         printf("这两个字符数组不相等");
    }
    
    return 0;
}

以上便是字符数组的操作和初始化定义

二维数组

这个是我们逻辑化的二维数组

而下面那个二维数组的实际存储是线性存储。物理化

Tips:同样需要注意下标的取值范围,以防止数组的越界访问。

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

//第一个[]表示行 第二个[]表示列。

最后二维数组也可以进行仅对部分元素赋初值

这里是指定每一行的第一个元素,因为剩下的,编译器会自动补足。

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

//如果希望整个二维数组初始化为0,那么直接在大括号里面写一个0即可
int a[3][4] = {0}

还有一个操作是指定部分元素特定赋值。但是,在vs code不能实现该操作,所有以我就没有写出来

若各位感兴趣的话,可以直接写写看。感谢各位的观看,谢谢。

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

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

相关文章

WPF+Halcon 培训项目实战(1-5):Halcon安装,图像处理,Halcon简单模板匹配

文章目录 前言相关链接项目专栏我个人对就业市场的评价Halcon安装实战1-4&#xff1a;Halcon基础实战5&#xff1a;模板匹配[形状匹配]实战代码 结尾 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主…

IDEA 开发中常用的快捷键

目录 Ctrl 的快捷键 Alt 的快捷键 Shift 的快捷键 Ctrl Alt 的快捷键 Ctrl Shift 的快捷键 其他的快捷键 Ctrl 的快捷键 Ctrl F 在当前文件进行文本查找 &#xff08;必备&#xff09; Ctrl R 在当前文件进行文本替换 &#xff08;必备&#xff09; Ctrl Z 撤…

excel 函数技巧

1&#xff1a;模糊查询 LOOKUP(1,0/FIND(F1062,Sheet1!C$2:Sheet1!C$9135),Sheet1!B$2:Sheet1!B$9135) 函数含义&#xff1a;寻找F列1062行和sheet1中的C2行到C9135行进行模糊查询&#xff0c;返回该行对应的B2行到B9135行的结果。未查到返回结果0 函数公式&#xff1a; LO…

基于Mbed Studio环境下开发STM32

基于Mbed Studio环境下开发STM32 &#x1f4cd;Mbed官网&#xff1a;https://os.mbed.com/ ✨mbed OS是ARM出的一个免费开源的&#xff0c;面向物联网的操作系统。提供了一个定义良好的API来开发C应用程序&#xff1b;集成度很高&#xff0c;类似Arduino&#xff0c;目前并不兼…

Flink on K8S生产集群使用StreamPark管理

&#xff08;一&#xff09;直接部署&#xff08;手动测试用&#xff0c;不推荐&#xff09; Flink on Native Kubernetes 目前支持 Application 模式和 Session 模式&#xff0c;两者对比 Application 模式部署规避了 Session 模式的资源隔离问题、以及客户端资源消耗问题&am…

Linux操作系统基础:从入门到实践

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 学习产出&#xff1a; Linux操作系统概述 Linux操作系统的定义和主要特点 Linux操作系统与其他操作系统的比较 Linux操作系统在不同领域的应用案例 Linux操作系统的历史 Linux操作系统的起源和发展过程 L…

浅谈WPF之ToolTip工具提示

在日常应用中&#xff0c;当鼠标放置在某些控件上时&#xff0c;都会有相应的信息提示&#xff0c;从软件易用性上来说&#xff0c;这是一个非常友好的功能设计。那在WPF中&#xff0c;如何进行控件信息提示呢&#xff1f;这就是本文需要介绍的ToolTip【工具提示】内容&#xf…

生产系统稳定上线600天!中国联通CUDB for OceanBase的开源共建和规模化应用

中国联通软件研究院架构部平台承载了上千应用的数据库需求&#xff0c;并且现存大量数据库使用过程缺少规范、缺少监控&#xff0c;同时还存在着数据库核心技术相关风险。为了实现核心技术自主可控&#xff0c;及时为用户解决线上问题、满足用户的功能需求&#xff0c;提供物美…

procise纯PL流程点灯记录

procise纯PL流程点灯记录 一、概述 此篇记录使用procise工具构造JFMQL15T 纯PL工程&#xff0c;显示PL_LED闪烁&#xff1b; 硬件说明如下&#xff1a; 时钟引脚 Pl_CLK: U2 ,IO_L14P_T2_SRCC_34 PL_LED1 : E2, IO_L17P_T2_AD5P_35 PL_LED2: D6, IO_L2N_T0_AD8N_35 PL_LED3 :…

C++11 lambda函数和包装器

目录 前言 一.lambda的引入 二、lambda函数的使用 1.一般使用 2.引用 三、包装器 1.包装普通对象 2.包装类成员对象 3.bind 前言 学习过python的同学应该对lambda函数不陌生&#xff0c;这是一个匿名函数&#xff0c;不需要写函数的名字。在不会多地方调用某个简单函数…

C# vs报错 id为XX的进程当前未运行

报错原因&#xff1a;虚拟目录端口被占用 解决方法&#xff1a;重新配置新的目录端口就行 1、选择项目属性 2、更改端口号&#xff0c;点击创建虚拟目录 3、重新生成项目

C# WPF上位机开发(MVVM模式开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学习过vue的同学都知道mvvm这个名词。从字面上理解&#xff0c;可能有点拗口&#xff0c;但是我们可以去理解一下它的优点是什么。mvc相信大家都明…

InDesign插件-常规功能开发-添加参考线-js脚本开发-ID插件

文章目录 1.脚本执行概述2.InDesign 对象模型3.源码解析4.界面及结果5.总结 1.脚本执行概述 “脚本”面板和“脚本标签”面板概述&#xff0c;InDesign 包含两个用于脚本的面板&#xff1a;“脚本”面板和“脚本标签”面板。在“脚本”面板中可以运行脚本而不必离开 InDesign。…

Python sanic框架钉钉和第三方打卡机实现

同样还是需要开通钉钉应用这里就不错多说了 第一步:梳理逻辑流程 前提&#xff1a;打卡的机器是使用postgres数据库&#xff0c;由于因为某些原因&#xff0c;钉钉userId 我已经提前获取到了存放到数据库里。 1.用户打卡成功后&#xff0c;我们应该监听数据库进行查询&#xf…

【教学类-35-07】17号的字帖(三)年份字帖“2023”(A4竖版1份)

作品展示 前四行是一个数字的描写 后四行是合并的年份4个数字 背景需求&#xff1a; 大4班17号孩子练习数字书写&#xff0c;上一次是“17”号和大“4”&#xff0c;第3份就是年份 【教学类-35-05】17号的学号字帖&#xff08;A4竖版1份&#xff09;-CSDN博客文章浏览阅读4…

数据结构--查找

目录 1. 查找的基本概念 2. 线性表的查找 3. 树表的查找 3.1 二叉排序树 3.1.1 定义: 3.1.2 存储结构&#xff1a; 3.1.3 二叉排序树的查找 3.1.4 二叉排序树的插入 3.1.5 二叉排序树删除 3.2 平衡二叉树&#xff08;AVL 3.2.1 为什么要有平衡二叉树 3.2.2 定义 3.3 B-树 3.3.1…

Flink1.17实战教程(第五篇:状态管理)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

Flink项目实战篇 基于Flink的城市交通监控平台(上)

系列文章目录 Flink项目实战篇 基于Flink的城市交通监控平台&#xff08;上&#xff09; Flink项目实战篇 基于Flink的城市交通监控平台&#xff08;下&#xff09; 文章目录 系列文章目录1. 项目整体介绍1.1 项目架构1.2 项目数据流1.3 项目主要模块 2. 项目数据字典2.1 卡口…

信息网络协议基础-IPv6协议

文章目录 概述为什么引入IP服务模型IPv4的可扩展性问题解决方法***CIDR(Classless Inter-Domain Routing, 无类别域间寻路)前缀汇聚***前缀最长匹配***NAT(网络地址转换)存在的问题解决方案路由表配置***局限性IPv6协议头标IPv6地址表示前缀类型单播地址链路局部地址(Link-Loca…

RabbitMq知识概述

本文来说下RabbitMq相关的知识与概念 文章目录 概述AMQP协议Exchange 消息如何保证100&#xff05;投递什么是生产端的可靠性投递可靠性投递保障方案 消息幂等性高并发的情况下如何避免消息重复消费confirm 确认消息、Return返回消息如何实现confirm确认消息return消息机制 消费…