c++ 基识-day2 - 数组、函数、指针、结构体
数组
-- 存储相同的数据类型
-- 存储在连续的内存位置
-- 数组从索引 0 开始,即通过下标来访问数组中的元素
**--- 数组定义:**
-- 数据类型 数组名[数组长度];
-- 数据类型 数组名[数组长度] = {值1,值2,,,,,,};
--- 初始化时,未全部赋值,余下的会用0填充
-- 数据类型 数组名[ ] = {值1,值2,,,,,};
--- sizeof(arr) ---》 统计 整个数组在内存中的长度
--- 数组在内存中的首地址: cout << arr << endl;
--- 数组第一个元素在内存中的地址: cout << &arr[0] << endl;
--- 数组名是常量,不可以进行赋值操作;
--- 二维数组
--- 数据类型 数组名 【行数】【列数】;
--- 数据类型 数组名 【行数】【列数】 = {{数1,数2},{数3,数4}};
--- 数据类型 数组名 【行数】【列数】 = {数1,数2,,,,,,,,};
--- 数据类型 数组名 【】【列数】 = {数1,数2,,,,,};
----
函数
--- 函数的定义
--- 返回值类型
--- 函数名
--- 参数列表
--- 函数体语句
--- return 表达式
--- 语法:
--- 返回值类型 函数名 (参数列表){
函数体语句
return 表达式
}
--- 函数的调用
--- 函数名(参数)
--- 值传递
--- 即:函数调用时,实参将数值传递给形参
--- 值传递时,若形参发生变化,并不会影响实参
---函数 常见样式
--- 无参无返、有参无返、无参有返、有参有返
--- 函数的声明
--- 函数可以声明多次,同一个函数只可定义一次;
--- 函数的声明: 返回值类型 函数名 (参数列表);
--- 函数的分文件编写
--- 函数分文件编写步骤:
--- 创建后缀为 .h 的头文件
--- 在头文件中 引用源文件 #include<iostream> using namespace std;
--- 创建后缀为 .cpp 的源文件
--- 在源文件中引用头文件 #include "创建的 .h 文件"
--- 在头文件中写函数的声明
--- 在源文件中写函数的定义
--- 在需要的文件中引用编写的分文件, 添加引用自己编写的头文件 #include "创建的 .h 文件"
---- eg:
---
--- void swap(int a,int b); 头文件中书写
--- void swap(int a,int b){int tmp = a;a = b;b = tmp} 源文件中书写
指针
--- 作用:可以通过指针间接访问内存(保存的就是变量在内存中的地址)
--- 内存编号是从0开始记录,一般用十六进制数组表示;
--- 可以利用指针变量保持地址
--- **定义及使用**
--- 数据类型 * 变量名;
--- eg: int a = 10; int * p; p = &a(让指针p记录变量a的地址); 其中:& 表示取址符号操作;
---- 可以通过 在指针前 加 * 代表 解引用,找到指针指向的内存中的数据;
---- *p = 10000; 来修改 a 所表示的值;
--- 指针所占的内存空间
---- 在32位操作系统下:占用4个字节空间 不管是什么类型数据
---- 在64位操作系统下:占用8个字节空间 不管是什么类型数据
---- int a = 10; int * p = &a;
---- sizeof(int *) 或者 sizeof(p)
--- 空指针、野指针
--- 空指针
--- 指针变量指向内存中编号为0的空间
--- 初始化指针变量
--- 空指针指向的内存是不可以访问的
--- eg: int * p = NULL;
--- 野指针
--- 指针变量指向非法的内存空间
--- int * p = (int *)0x1100
--- const修饰指针
--- const 修饰指针 ---》 常量指针,(指针指向可以改,指针指向的值不可以更改)
--- int a = 10; int b = 10; int * p = &a;
--- const int * p = &a; *p = 20(出错); p = &b(正确);
--- const 修饰常量 ---》 指针常量 , (指针指向不可修改,指针指向的值可以修改)
--- int * const p = &a;
--- *p = 20(正确); p = &b(出错);
--- const 既修饰指针,又修饰常量, (指针指向和指向的值均不可以修改)
---- const int * const p = &a;
---- *p = 20(出错); p = &b(出错);
--- 指针和函数 ----- 》 先用指针获得目标的首地址
---- int arr[10]; ---> int * p = arr // arr就是数组首地址; p++;//让指针向后偏移4个字节
--- 值传递
--- 值传递,不会改变实参
--- 地址传递 ----》 地址传递,可以修饰实参
--- swap(&a,&b)
--- 指针、数组、函数
---
结构体
--- 自定义数据类型,可存储不同的数据类型;
--- 定义及使用;
--- 语法:
--- struct 结构体名 {结构体成员列表};
--- 创建方式:
--- struct 结构体名 变量名
--- struct 结构体名 变量名 = {成员1值,成员2值,,,,}
--- 定义结构体是顺便创建变量
--- eg:
---- struct stu{
string name;
int age;
int height;
int idnum;
}
--- 结构体函数
--- struct 结构体名 数组名【元素个数】 = {{},{},。。。。,{}}
--- 结构体指针
---- 利用操作符: -> 可以通过结构体指针访问结构体属性
---- struct stu {age,id}
---- stu s
---- stu * p = &s
---- p -> name p->age
--- 结构体嵌套结构体
--- struct tech{int id;string name; struct stu ss}
--- struct stu{string name; int age}
--- 结构体做函数参数
--- 值传递
--- 地址传递
--- 结构体中的 const 使用场景