第 10 章 数组
10.1 数组的概念
① 数组四要素
(1)数组名:本质上是一个标识符常量,命名需要符合标识符规范。
(2)元素:同一个数组中的元素必须是相同的数据类型。
(3)下标(索引、角标):从0开始的连续数字。
(4)数组的长度:表示元素的个数。
② C 语言数组特点(不用记)
(1)创建数组时会在内存中开辟一整块连续的空间,占据的空间的大小,取决于数组的长度和数组中元素的类型。
(2)数组中的元素在内存中是依次紧密排列的且有序的。
(3)数组一旦初始化完成,其长度就是确定的,数组的长度一旦确定,就不能修改。(重点); 其中的元素值可以修改
(4)我们可以直接通过索引(下标)获取指定位置的元素,速度很快。
重点:
// 不能给数组名重新赋值
// arr = {10,20,30,40,50,60,79};
10.2 数组的操作
① 如何定义数组
1)方式一:先指定元素的个数和类型,再进行初始化 (先声明,再初始化赋值)
eg:
int arr1[5];
// 给元素赋值, 每个元素都有下标
arr1[0] = 100;
2)方式二:指定元素的类型和个数并同时进行初始化 (声明并同时初始化赋值)
eg: double arr2[4] = {1.4, 2.5, 3.3, 4.9};
3)方式三:指定元素的类型,不指定元素个数,同时进行初始化 (声明时不指定长度,必须同时进行初始化赋值)
eg: short arr3[] = {10,20,30,40,50,60,70,80};
② 访问数组元素
数组名[下标]
③ 数组越界
越界访问会得到随机值(垃圾值)
④ 数组长度计算
sizeof 数组名 / sizeof (元素类型);
// 或者
sizeof 数组名 / sizeof 数组名[0];
⑤ 遍历数组 ——(将数组中的元素逐个获取到)
for (int i = 0; i < 数组长度-1; i ++)
{
数组名[i];
}
注:// 声明长度为 len 的数组 ——声明数组的时候使用变量表示长度,C99标准增加的写法
int nums[len];
10.3 字符数组(字符串)
① 字符串的本质
本质就是元素是char类型的数组(字符数组)
最后有个字符串结束标记 \0
② 如何定义字符串
1. 跟定义数组相同,需要设置字符串结束标记
2. 定义字符串的简化写法,自动添加字符串结束标记
写法:
第一种:数组名[]={"字符数组/字符串"};
第二种:数组名[]="字符数组/字符串";
eg:
1、
// 手动添加字符串结束标记
char msg1[8] = {'B', 'e', 'i', 'j', 'i', 'n', 'g', '\0'};
// 自动添加字符串结束标记
char msg2[9] = {'S', 'h', 'a', 'n', 'g', 'h', 'a', 'i'};
char msg4[10] = {'W', 'u', 'h', 'a', 'n'};
// 不会添加字符串结束标记
char msg3[4] = {'X', 'i', 'a', 'n'}; // 由于本身字符串有5个字符,而定义只给了4个
2、简化写法
—— 可以把每个字母的单引号改为整个字符串的双引号 ;当为双引号时,大括号可以省略
// 简化写法一
char msg1[] = {"Beijing"};
// 简化写法二
char msg2[] = "Hello World";
③ 字符串的访问和遍历
通过下标可以访问字符串中的每个字符
10.4 多维数组
1. 多维数组的概念
2. 如何定义二维数组:类型、行数、列数,初始化
三种:
// 1)先声明二维数组,指定类型、行数、列数,再初始化
double arr1[3][2];
arr1[0][0] = 10.0;
arr1[0][1] = 11.0;
arr1[1][0] = 20.0;
arr1[1][1] = 21.0;
arr1[2][0] = 30.0;
arr1[2][1] = 31.0;
// 2)指定类型、行数、列数,并初始化(同时声明并赋值) ——推荐使用这个,可读性高
int arr2[2][3] = {
{10, 20, 30},
{100, 200, 300}};
// 3)指定行数列数并初始化,元素自动分配
int arr3[3][4] = {10,20,30,40,50,60,70,80,90,100,110,120};
// 4)省略行数,指定列数, 初始化, 元素自动分配
int arr4[][4] = {10,20,30,40,50,60,70,80,90,100,110,120};
3. 二维数组的访问和遍历
4. 二维数组的内存形式
eg:二维字符串
// 遍历输出字符串
for(int i=0; i < 3; i++)
{
printf("%s \n", arr[i]); // 由于字符串有一个专门的格式化占位符:%s,所以可以直接把字符串拿出来,写法: 数组名[行下标] 来拿出来
}
第 11 章 函数
11.1 函数的基本概念
1. 什么是函数?
函数是具有特定功能的代码块
2. 函数的分类:
库函数
自定义函数
11.2 函数基本语法
① 声明函数(定义函数)
函数四要素:
① 函数名,是标识符,需要满足标识符规范
② 函数体,该函数的代码块,写在 {} 中
③ 返回值和返回类型,返回值作为函数的计算结果
③ 参数,分为形参和实参
注意:强烈不建议函数嵌套声明,C语言也不允许函数嵌套!
② 调用函数
1. 函数名加小括号表示函数的调用,函数只有调用 函数体语句才执行,且每调用一次,函数体都执行一遍
函数名(); ——调用函数
2. 函数调用表达式的值【eg:函数名 ();】是函数的返回值
③ 返回值 *
1. 有返回值:返回类型与return右边表达式的值的类型一致;如果不一致会发生数据类型转换 (类似于赋值过程中自动类型转换)
2. 没有返回值*: ——没有返回值的函数需要指定返回类型为 void *
①函数体中没有return语句;
②return的右边是空的;
3. return 除了能够设置函数返回值,还可以结束所在的函数
④ 参数
1. 形参
声明函数时所设置的参数,需要指定数据类型和形参名。形参的本质就是一个函数,只能在函数内部使用。
2. 实参
调用函数时所给的参数,用于给形参赋值,数量要与形参一致。
注意:实参的数量要与形参的数量一致,否则报错。*
函数的参数是单向传递的
也就是说,如果你在函数内部更改了参数的值,这些更改不会影响到函数外部的变量。
这是因为在C语言中,函数的参数都是通过值传递的,函数会接收参数的一个副本,而不是原始参数本身。
在函数内部更改参数的值,并在函数外部反应出来,需要使用指针(传输地址,解引用赋值)就可以修改
eg:形参
// 定义函数
void func(int x) // x表示的是形参
{
int num =100;
const double PI =3.14;
char msg[]="Hello";
printf("PI=%.2lf \n", PI);
printf("msg= %s \n",msg);
}
总结
1. 数组4要素
元素(元素类型)、数组名、下标、长度
2. 数组操作
定义数组
通过下标读写数组的元素
越界访问
计算数组长度
遍历数组
3. 字符数组(字符串)
特点: 字符串结束标记 %s
定义字符串
通过下标读写字符,遍历
4. 多维数组
访问元素
遍历
内存形式
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇