petard  

第 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. 多维数组
   访问元素
   遍历
   内存形式

posted on   岌岌无名  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇
 
点击右上角即可分享
微信分享提示