一.指针
#include<iostream>
using namespace std;
#define pi 3.14159//定义常量
int main(){
cout<<pi<<endl;
int a=10;
int *p=NULL;//定义指针
p=&a;
cout<<"a的地址为:"<<p<<endl;
cout<<"a="<<*p<<endl;
return 0;
}
1.指针的作用
通过指针可以间接访问内存
- 内存编号是从0开始记录的,一般用十六进制数字表示。
- 可以利用指针变量保存地址。
2.指针的定义与使用
数据类型 * 变量名
3.空指针与野指针
空指针: 指针变量指向内存中编号为0的空间
用途: 初始化指针变量
注意: 空指针指向的内存是不可以访问的
int *p = NULL;//初始化指针,NULL为0
//空指针不可访问
//0~255之间的内存编号是系统占用的,不允许用户访问
cout << *p << endl;// 引发了异常: 读取访问权限冲突。p 是 nullptr。
野指针: 指针变量指向非法的内存空间
4.关键字new与delete【动态内存管理】⭐️
new与delete管理对象
在C++提供关键字new来创建对象,delete释放对象,但释放数组需要加上[]。
(类似于:在C语言是用库函数malloc来申请内存,free来释放内存)。
动态管理内存的入口 | |
malloc, free | new, delete |
C/C++标准库的函数 | C++操作符 |
只是动态分配内存空间/释放空间 | 除了分配空间还会调用构造函数和析构函数进行初始化与清理(清理成员) |
需要手动计算类型大小且返回值w为void | 可自动计算类型的大小,返回对应类型的指针。 |
管理内存失败会返回0 | 方式管理内存失败会抛出异常 |
#include<iostream>
using namespace std;
int main(){
int *p1=new int;
*p1=99;
cout<<"sizeof *p1="<<sizeof(*p1)<<endl;
cout<<"*p1="<<*p1<<endl;
cout<<"p1="<<p1<<endl;
delete p1;//释放p1指向的内存
return 0;
}
(1)
#include<iostream>
using namespace std;
int mian(){
int *p1=new int;
int *p2=new int(8);//初始化
int *p3=new int[5];//动态分配数组
delete p1;
delete p2;
delete[] p3;
return 0;
}
二.函数
#include<iostream>
using namespace std;
void max(int p,int t);//函数声明
int main(){
int a=9,b=10;
cout<<a<<b<<endl;
max(a,b);//函数调用,实参列表
return 0;
}
void max(int p,int t){//函数定义,形参列表
int u=p>t?p:t;
cout<<u<<endl;
}
形参与实参的关系:
两者是在调用的时候进行结合的,通常实参会取值传递给形参,形参之后进行函数过程运算,然后可能将某些值经过参数或函数符号返回给调用者。
1.文件包含
文件包含是指将一些头文件或其他源文件包含到本文件中,一个文件被包含后该文件的所有内容就被包含进来了。
#include<文件名>
#include"文件名"
尖括号< >和双引号" "的区别:
- 用尖括号时,称为标准模式,系统直接到存放c/c++库函数的文件中查找要包含的文件。
- 用双引号的时候,系统优先在当前目录中查找要包含的头文件,若找不到,再按标准模式查找。
一般来说,使用库函数的时候用< >,使用用户自定义的头文件时用" ";