day03.函数与指针(含new与delete关键字)

一.指针

#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"文件名"

尖括号< >和双引号" "的区别:

  1. 用尖括号时,称为标准模式,系统直接到存放c/c++库函数的文件中查找要包含的文件。
  2. 用双引号的时候,系统优先在当前目录中查找要包含的头文件,若找不到,再按标准模式查找。

一般来说,使用库函数的时候用< >使用用户自定义的头文件时用" ";

相关推荐

  1. C++:newdelete

    2024-02-03 04:36:02       36 阅读
  2. c++的newdelete

    2024-02-03 04:36:02       58 阅读
  3. c++中的newdelete

    2024-02-03 04:36:02       70 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-03 04:36:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-03 04:36:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-03 04:36:02       82 阅读
  4. Python语言-面向对象

    2024-02-03 04:36:02       91 阅读

热门阅读

  1. 软件工程知识梳理0-概述

    2024-02-03 04:36:02       50 阅读
  2. 大模型系列课程学习-prompt指令快速入门

    2024-02-03 04:36:02       52 阅读
  3. Sql Server之更改跟踪功能

    2024-02-03 04:36:02       54 阅读
  4. SQL Server 函数参考手册(SQL Server 日期函数)

    2024-02-03 04:36:02       48 阅读
  5. Node Exporter开启tcp相关指标

    2024-02-03 04:36:02       49 阅读
  6. chatchat部署在ubuntu上的坑

    2024-02-03 04:36:02       59 阅读
  7. Spring声明式事务

    2024-02-03 04:36:02       63 阅读
  8. 算法练习03——滑动窗口

    2024-02-03 04:36:02       59 阅读