指针和引用;内联函数和普通函数

1. 指针和引用

1.1 定义和性质区别

  1. 指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。
  2. 可以有const指针,常量指针可以改变指向,指针常量不能改变指向,也可以有const引用,引用的指向不能改变
  3. 指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)
  4. 指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化
  5. 指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后指向的内存单元不再改变;
  6. “sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小,即地址的大小;
  7. 指针和引用的自增(++)运算意义不一样;

1.2 指针和引用作为函数参数进行传递时的区别

用指针传递参数,可以实现对实参进行改变的目的,是因为传递过来的是实参的地址,因此使用*a实际上是取存储实参的内存单元里的数据,即是对实参进行改变,因此可以达到目的。

在将引用作为函数参数进行传递时,实质上传递的是实参本身,即传递进来的不是实参的一个拷贝,因此对形参的修改其实是对实参的修改,所以在用引用进行参数传递时,不仅节约时间,而且可以节约空间。、

1.3 何时使用引用和指针

指向空值,可改变指向,多级传递:指针;可用引用的地方都可用用指针,反之不行。

2. 内联函数和普通函数的区别

普通函数调用时会使程序跳到另一个地址(函数的地址),并且在函数结束时返回。

  1. 执行函数调用指令,立即存储该指令的地址,并将函数参数保存到的堆栈。
  2. 跳到函数起点的内存单元,执行函数代码(将返回值保存到寄存器中。
  3. 跳回被保存指令的地址处。

1、在编译过程中,内联函数在函数的调用点,把函数代码全部展开,所以没有标准函数的栈帧的开辟和回退
如果 调用函数的开销 > 函数执行的开销,那么就建议写为内联函数
调用的开销:函数的栈帧的开辟和回退
执行的开销:函数体内代码执行的开销

2、内联函数只在本文件可见,编译阶段就进行了替换,所以不产生符号,所以一般在头文件中定义,这样就可以在其它文件调用。普通函数产生符号,多个文件引用头文件,会产生符号重定义的错误。
.编译阶段不编译.h文件,只编译.c 或.cpp 文件

注意:inline只在release版本起作用,debug版本inline函数也需要栈帧的开辟和回退

思考?

我们说到内联函数是编译器用函数相应的代码替代了函数调用

那内联函数还遵循按值传递参数吗?

a到底是0还是1?

inline void fun(int a){a=1;}int main(){int a=0;fun(a);cout<<a;return 0;
}

 在编译器看来:

inline void fun(int a){a=1;}int main(){int a=0;a=1; //fun(a);cout<<a;return 0;
}

输出结果:

输出表明,内联函数和普通函数一样,都是按值传递参数。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143498.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

社恐人群的社交新宠:实时人脸融合互动应用

目录 简介 实现思路 1. 引入所需库 2. 人脸检测器和特征点模型的初始化 3. 打开摄像头 4. 选择覆盖的图片 5. 获取图片的尺寸 6. FPS计算初始化 7. 主循环处理每一帧 8. 人脸检测和特征点识别 9. 处理每一张检测到的人脸 10. 调整图片大小并叠加到人脸上 11. FPS计…

PowerShell install 一键部署Oracle19c

Oracle19c前言 Oracle 19c 是甲骨文公司推出的一款企业级关系数据库管理系统,它带来了许多新的功能和改进,使得数据库管理更加高效、安全和可靠。以下是关于 Oracle 19c 的详细介绍: 主要新特性 多租户架构:支持多租户架构,允许多个独立的数据库实例在同一个物理服务器上…

JAVA开源项目 校园美食分享平台 计算机毕业设计

本文项目编号 T 033 &#xff0c;文末自助获取源码 \color{red}{T033&#xff0c;文末自助获取源码} T033&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

【开源大模型生态8】这么多开源大模型

这张图片列出了多个开源的大模型&#xff0c;按照应用层、平台层、基础层和算力层进行了分类。下面我会为您逐一介绍这些模型及其特点&#xff1a; 应用层 AquilaCode: 一种用于自然语言处理的应用程序&#xff0c;可能是用于文本编码或解码的任务。SQLCoder: 可能是一种用于…

FLUX屠榜了小红书,平台这会也真假难辨

最近&#xff0c;小红书被一种新潮的AI绘图技术“屠榜”&#xff0c;这种技术就是FLUX。通过FLUX生成的虚拟美女照片&#xff0c;不仅成功“骗过”了平台审核&#xff0c;还让无数普通用户和商家惊讶。 越来越多人开始讨论这项技术的潜力&#xff0c;甚至一些并非技术玩家的用…

《SmartX ELF 虚拟化核心功能集》发布,详解 80+ 功能特性和 6 例金融实践

《SmartX ELF 虚拟化核心功能集》电子书现已发布&#xff01;本书详细介绍了 SmartX ELF 虚拟化及云平台核心功能&#xff0c;包含虚机服务、容器服务、网络服务、存储服务、运维管理、工具服务、数据保护等各个方面。 即刻下载电子书&#xff0c;了解如何利用基于 SmartX ELF …

【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析

一. XDMA IP核两种模式 Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中&#xff0c;支持普通的XDMA模式&#xff0c;但是这种模式只允许主机端发起PCIe 读写请求&#xff0c;FPGA内部无法主动发起读写请求&#xff0c;也即FPGA无法主动读写HOST的内存。 而该IP核的另…

c++编程(26)——智能指针

欢迎来到博主的专栏&#xff1a;c编程 博主ID&#xff1a;代码小豪 文章目录 智能指针什么是智能指针&#xff1f; auto_ptrunique_ptrshare_ptrshared_ptr缺陷 weak_ptr 智能指针 什么是智能指针&#xff1f; 智能指针是c中关于动态内存管理的重要一环&#xff0c;在智能指针…

力扣718-最长重复子数组(Java详细题解)

题目链接&#xff1a;718. 最长重复子数组 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 5…

Linux嵌入式相机 — 项目总结

main函数执行流程 1、初始化触摸屏 Touch_screen_Init();struct tsdev *ts NULL; ts ts_setup(NULL, 0); //以阻塞打开2、初始化 LCD LCD_Init(void); 通过 ioctl 函数获取 LCD 的固定参数、可变参数&#xff0c;得到分辨率、bpp、一行的长度&#xff08;以字节为单位&a…

【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算

操作环境&#xff1a; MATLAB 2022a 1、算法描述 界面布局 计算器界面的主要元素分为几大部分&#xff1a;显示屏、功能按钮、数字按钮和操作符按钮。 显示屏 显示屏&#xff08;Edit Text&#xff09;&#xff1a;位于界面顶部中央&#xff0c;用于显示用户输入的表达式和…

【激励广告带来的广告收入与用户留存率的双重提升】

激励广告带来的广告收入与用户留存率的双重提升 ) 随着移动应用市场的竞争加剧&#xff0c;如何通过广告变现成为众多开发者关注的焦点。其中&#xff0c;激励广告&#xff08;Rewarded Ads&#xff09;凭借其用户友好、互动性强等特点&#xff0c;逐渐成为开发者的首选。那些…

Java——Static与final修饰的变量与方法(总结)

前言&#xff1a; Java语法学过一遍之后&#xff0c;我相信大多数和我一样脑瓜子嗡嗡的&#xff0c;甚至有点乱了&#xff0c;这时候应该自己把之前的能总结的&#xff0c;或者不熟悉的都要总结一遍&#xff0c;以便于后期的学习&#xff01;&#xff01; static修饰的成员变量…

[附源码]SpringBoot+VUE+Java实现人脸识别系统

今天带来一款优秀的项目&#xff1a;java人脸识别系统源码 。 系统采用的流行的前后端分离结构&#xff0c;内含功能包括 “人脸数数据录入”&#xff0c;“人脸管理”&#xff0c;“摄像头识别” 如果您有任何问题&#xff0c;也请联系小编&#xff0c;小编是经验丰富的程序员…

数码好物抢先看!2024有什么好用又实惠的好物推荐!

在数字科技日新月异的今天&#xff0c;各种数码好物层出不穷&#xff0c;它们以其先进的技术、创新的功能以及不断提升的性能&#xff0c;为我们的生活带来了极大的便利和乐趣。对于消费者来说&#xff0c;在众多的数码产品中挑选出好用又实惠的好物&#xff0c;无疑是一件既令…

Spring Controller

服务器控制 响应架构 Spring Boot 内集成了 Tomcat 服务器&#xff0c;也可以外接 Tomcat 服务器。通过控制层接收浏览器的 URL 请求进行操作并返回数据。 底层和浏览器的信息交互仍旧由 servlet 完成&#xff0c;服务器整体架构如下&#xff1a; Server&#xff1a; Tomcat…

电机知识总结

一.直流无刷电机&#xff08;BLDC&#xff09; 27N30P指有27个槽&#xff0c;30的极数&#xff0c;它的极对数&#xff1a;30/215,所以是15对极。 N必须是3的倍数&#xff0c;P必须是偶数&#xff0c; 电角度是电气特性&#xff0c;机械角度是空间特性&#xff0c;必须指明是谁…

Selenium等待机制:理解并应用显式等待与隐式等待,解决页面加载慢的问题

目录 引言 等待机制的重要性 显式等待&#xff08;Explicit Wait&#xff09; 原理 应用方式 代码示例 优点与缺点 隐式等待&#xff08;Implicit Wait&#xff09; 原理 应用方式 代码示例 优点与缺点 解决页面加载慢的问题 1. 合理设置等待时间 2. 优先使用显…

数据三维可视化技术的应用场景

数据三维可视化技术作为一种强大的工具&#xff0c;已经在各个领域展现出了巨大的应用潜力。它不仅提供了直观、生动的数据展示方式&#xff0c;还让用户能够更深入地理解数据间的关联和趋势。下面将探讨数据三维可视化技术的应用范围及其在不同领域中的重要性。 数据三维可视化…

控价服务如何判断高低

在当今竞争激烈的市场环境中&#xff0c;品牌控价成为企业发展的关键一环。许多品牌选择与第三方控价公司合作&#xff0c;借助其专业的电商价格监测系统&#xff0c;既能节省人力成本&#xff0c;又能获得高质量的服务。然而&#xff0c;如何判断第三方控价服务系统的优劣呢&a…