首页 > 编程语言 >C++ 学习 第七天

C++ 学习 第七天

时间:2023-04-18 22:22:39浏览次数:35  
标签:函数 形参 内存空间 C++ 学习 地址 第七天 指向 指针

今日内容:指针  函数  

指针:

指针是用于记录一块内存空间地址的 符号& 后面跟的是一个变量的时候,代表的是取址符 符号*    乘号:需要左右两侧的操作数    指针符:当*的前方跟的是一个数据类型的 时候   解引用符:当*后方跟的是指针的时候 int number=20 int* ptr=&number; *ptr;解引用  

 

无效指针:空指针 野指针

空指针:

是程序员主动触发,再创建一个指针变量后不确定具体指向的时候给出赋值,空指针经常用于判断指针的有效性 null 相当于变量的值为0  判断指针是否为空(可控)1 判断指针是否为空(可控)2

野指针:

形成的场景:a.程序员给出了无效地址(非常少见的情况) b.未经初始化的指针,不知道具体指向  c.程序员在主动释放内存空间没有回收 a.给出了无效的地址,这个地址是没有对应的内存空间存在的 b.未经初始化的指针 c.程序员在主动释放内存空间没有回收   回收地址 空指针可控,野指针不可控  

指针和数组的关系:

声名数组并赋值: 10的地址: 20的地址: 解引用  10: 解引用 20  

遍历数组:

数组的名称是指针,不是变量,是一个常量指针  输出变量值   数组的名字是数组的首地址(首元素的地址)  

指针变量的字节数问题:

指正变量是用于记录一个地址的,在内存空间中的占位始终是4字节

结构体指针:

(结构体类型的指针) 以下AddInfo里输出的是小白 而在SelInfo里输出的是空,这是因为Hero heroInstance 是局部变脸 hptr的地址指向了这个局部变脸的地址 当函数调用完成后 局部变量什么周期结束了 释放内存 它原本指向的值就变成了空 所以hPtr调用的值也是空 以下AddInfo1里输出的是小白 在SelInfo1里输出的也是小白 这和上面不同是因为 这个是在堆内存中申请了一个内存空间 因为没有进行delete操作 和回收地址没有释放它的内存,所以它所指向的内存 而hPtr1没有释放所以hPtr1还是指向了这个内存空间 所以值就变成小白了

指针数组:

创建4个指针变量 创建一个容器,存放以上的4个指针 指针数组赋值:  

函数:

语法:返回函数  函数名(参数列表){函数体} 存在多个默参的时候必须从右向左,中间没有跳跃式赋默参

形参和实参:

int a ,bool b ,string s是形参 以下100 false Hello是实参 实参是一个值  形参是一个变量 声名的时候可以不给形参 声名和定义的参数名称可以不一致,但是必须保证参数的类型一致切顺序一致

默参:

C++允许存在默认参数(默参) 在函数声名和定义拆开的时候默认参数给到声名的位置 调用一个不带默参的函数时,必须得按照形参类型传实参 调用带默参的函数时  形参不赋值 输出结果是10  形参赋值 输出结果是形参赋予的那个值  

指针函数:

这是一个无返回值无蚕食类型的函数指针,并将这个指针初始化为空指针 将test函数地址赋值给ptr 指针函数的作用就是可以将一个函数作为另一个函数的参数进行传递 借助指针调佣指针指向的函数 括号是函数调用符 没有括号调用的是函数的地址 指针的类型不匹配会导致报错   以下是ptr1指针,能够指向一个返回值为string.参数为int的函数 以下是ptr2是一个指针,能够指向一个返回值为string.参数为int,string的函数  

函数指针的使用:

两个参数a. CallBackPtr 实参100传给形参a 函数Addhero的地址传给CallBackptr

标签:函数,形参,内存空间,C++,学习,地址,第七天,指向,指针
From: https://www.cnblogs.com/xiangyangzhenshoushi/p/17331417.html

相关文章

  • Node.js入门学习笔记
    NodeJs是js的运行时,意味着可以在浏览器外运行js。可以使用nodejs来构建服务器端应用、CLI应用、WebAPI,甚至用electron构建桌面端应用。使用nvm来管理node版本。在终端输入node进入REPL环境,可以测试和执行代码,mac系统使用control+d退出REPL环境。执行某个js文件:nodexxx.js......
  • 4.18学习总结
    用户输入整数n(1<=n<=26)和整数m(m<=n),然后输入n个不同的字母,请编写程序输出在这n个字母中选择m个字母的所有排列序列和组合序列。【源代码程序】import itertools#输入a=input("请输入整数n和整数m的值:")a1=a.split("")for iin a1[::]:    if i=='':    ......
  • 【GIT】学习day03 | 如何生成并配置SSH公钥
    快速笔记:1、注册并激活码云账号2、生成并配置SSH公钥(运行[email protected]检测SSH公钥是否配置成功)3、创建空白的码云仓库4、把本地项目上传到码云对应的空白仓库中双击进入 打开里面复制公钥 添加到gitee上即可 新建仓库步骤 然后创建就完事了,不过一开始......
  • 4.18 c++图形库easyx的基础编程
    头文件#include<graphcis.h>一基础绘图概念1.颜色用三原色表示RGB(红色部分,绿色部分,蓝色部分)每一部分的数值范围(0~255)。基本大写英文单词已对应例如BLUE蓝色2.窗口坐标的默认原点在左上角(0,0)x轴正方向向右,y轴正方向向下。二窗口函数initgraph(intwidth,intheigh......
  • 【GIT】学习day02 | git环境搭建并将项目进行本地管理
    进入终端输入GitHub或者给gitee的用户名和邮箱地址然后依次敲入一下信息gitcommit-m"initproject"gitinitgitadd. 正确结果如下 ......
  • 四月学习之LVS shell脚本配置DR模型
    1、DS脚本配置#!/usr/bin/bashVIP=172.16.1.100RS1=172.16.1.5RS2=172.16.1.6PORT=80SCHEDULER=rrDEV=eth1:1case$1instart)#配置虚拟IP地址VIP cat>/etc/sysconfig/network-scripts/ifcfg-${DEV}<<-EOF TYPE=Ethernet BOOTPROTO=none DEFROUTE=y......
  • C++入门
       本篇文章与大家分享一些c++的关键字、命名空间及输入输出的相关知识。首先,我们先了解一下c++的关键词,具体如下:C++的关键词c++的关键词,共计64个,部分与c语言相似,这些关键字需不需要背呢?答案是否定。回顾我们学c语言的过程,关键词用着用就记住了,没必要刻意去记忆。对于c++的......
  • C++第三章课后练习题
    编写可以求两个数最大公约数和最小公倍数的函数。1#include<iostream>2#include<cmath>3usingnamespacestd;4intfun1(intx,inty)5{6inttemp;7if(x<y)8{9temp=x;10x=y;11y=temp;12}13......
  • c++打卡第八天
    一、问题描述。   我国古代有一种说话叫三天打鱼两天晒网,如果一个人从1990年1月1日开始,开始三天打鱼两天晒网,问输入一个年月日,此时他是在打鱼还是晒网。二、设计思路。①、我们可以通过计算从输入日期到1990年1月1日总共有多少天,总天数除余周期五,如果结果为1.2.3则此人此......
  • 日常makedonw学习
    #markdonw学习###初来乍到,新人小白学习java从零开始学自学希望有不对的地方欢迎各位前辈来指正!今天是第一天,希望能再这里认识各位和我一样的同道中人一起学习交流,总觉得要想学得好,就要有个好的学习方法。看了很多种类的学习方法,感觉这是最适合我的学习方法,我比较笨这样能巩固......