回顾:
“abcd”//数据类型
字符串常量
const char *p="abc";
new STU
const char *//8 指针的内存空间
int
float
指针的内存空间 p
指针指向的内存空间 "abc" 取决于字符串长度
指针变量的内容一级指针
指针变量的地址二级指针
const char *p="abc";
new申请空间 指针变量指向的内容
new完返回申请到的空间的首地址
molloc-》void*
结构体中的指针
结构体内含有指针成员。
堆区结构体变量要先为结构体申请空间,然后为结构体里的指针申请空间;
释放的时候先释放结构体里的指针申请的空间,然后释放为结构体申请的空间。
栈区为结构体里的指针申请空间;
释放结构体里的指针申请的空间
拆房子
小盒子??? 内存泄漏
大房子(结构体)-》小盒子(name)
结构体和函数
结构体普通变量做函数参数
也是值传递,在函数内修改形参,不会影响外界实参
add(int a)(a)
add(int *a)(&a)
结构体指针变量做函数参数
地址传递,形参就是实参
char arr[10]="abc";
scanf("%s",arr);
结构体数组名做函数参数
地址传递
Int arr[10] 10 int
STU arr[10] 10 STU
结构体的大小
只有成员变量占内存空间
而成员函数是不占内存空间的。
结构体变量占用的内存空间永远是所有成员中占用内存最大成员的整数倍(对齐问题)。
占用内存最大属性是score,占8个字节所以第一次会分配8个字节
将第一次分配的8个字节分配给age4个,分配给ch1个,含剩下3个字节
当需要分配给score时,发现只剩下3个字节,所以会再次开辟8个字节存储空间
一共开辟了8个字节空间,所以最终p占用16个字节
联合 (共用体)
在C++中,有一个和结构体十分类似的数据类型,叫联合。与结构体相比,它更省内存空间。
union 联合名
{
类型1 成员名1;
类型2 成员名2;
....
类型n 成员名n;
};
联合体所占的内存长度等于其最长成员的长度,也有叫做共用体;
共用体变量的地址和它的各成员的地址都是同一地址。
struct 3 三室一厅 abc
共用体 a
同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用;
共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖;
大端存储和小端存储
枚举
enum 枚举名
{
枚举元素1,
枚举元素2,
.......
}
枚举元素的值取决于定义时各枚举元素排列的先后顺序。
默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1.
也可以在定义枚举类型时改变枚举元素的值
代码不重要-》
思路-》
转化代码(语法)
C++程序的组成
1.预处理指令
#include<iostream>
全局声明和定义
函数 exit()
语句和表达式 a+b
if(a+b>0)
a+b;
内存管理
异常处理
C++程序中的预处理指令以井号(#)开头
如#include等
还有一种预处理指令叫#define
宏
用于在编译之前对源代码进行文本 替换
宏由预处理器#define指令定义,
#define 名字 数字 常量
#define PI 3.14
宏函数
参数需要()
计算表达式()
函数式宏只是做宏展开,不检查类型
条件编译
#ifdef(#ifndef) 宏
....
#else
...
#endlf
windows
linus
多文件编程
a.cpp fun1
b.cpp fun2
c.cpp fun
{
fun1
fun2
}
1.把所有函数分散在多个不同的源文件cpp文件里(主函数通常单独在一个文件里)
2.为每个源文件分别写配对的以.h作为扩展名的头文件(主函数所在的源文件不需要配对的头文件)
这些文件包含类的声明、函数原型、宏定义和常量等.
它们的主要作用是提供接口,让其他源文件知道如何使用这些声明和定义.头文件通常以.h或.hpp作为文件扩展名.
int add(int a ,int b) ;
3.修改所有源文件,在源文件里使用#include预处理指令包含必要的头文件(在.h中写函数声明,在对应的.cpp文件中写函数的实现)
4.主文件(.cpp)是程序的入口点,通常包含一个main函数.主文件负责将其他源文件编译链接在一起,
形成最终的可执行程序.
多文件编程时编译的命令:编译多文件程序的时候需要在g++命令后列出所有源文件的路径
test_1.cpp
#include "test_1.h"
#include "test_2.h"
test_2.cpp
#include "test_1.h"
#include "test_2.h"
循环引用
死循环
解决头文件重复引用时的条件编译命令格式
#ifndef 头文件名 (全大写,用_连接)
#define 头文件名
//包含的头文件和函数声明
#endif