当前位置: 首页 > news >正文

c/c++:栈帧,传值,传址,实参传值给形参,传地址指针给形参

c/c++:栈帧,传值,传址,实参传值给形参,传地址指针给形参

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
【9】c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
【10】c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句
【11】c/c++:for循环语句,分号不可省略,表达式可以省略,猜数字游戏,跳转语句continue,break,避免写goto
【12】c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法
【13】c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩
【14】c/c++:visual studio的代码快捷键,VS设置自定义默认代码,使用快捷键
【15】c/c++:三维数组,字符数组和字符串,统计字符串中字符出现的频次,scanf输入空格,正则匹配表达式
【16】c/c++:gets(),fgets(),puts(),fputs(),strlen(),字符串拼接函数
【17】c/c++:函数的作用,分类,随机数,函数定义,调用,申明,exit()函数,多文件编程,防止头文件重复
【18】c/c++:指针,指针定义和使用,指针大小4字节,野指针,空指针*p=NULL
【19】c/c++:万能指针,泛型指针,const int *p,int const *p,int *const p,const int *const p,指针与数组,p++,
【20】c/c++:指针p+p-p*p/,数组&a+1,指针减指针,指针实现strlen函数,指针的比较运算,指针数组,多级指针


文章目录

  • c/c++:栈帧,传值,传址,实参传值给形参,传地址指针给形参
    • @[TOC](文章目录)
  • c/c++:栈帧:函数调用,临时在栈空间stack上申请一个内存区域,供函数调用,主要存放形参和局部变量
  • 实参传值,这种方式内存耗费大
  • 你想改变实参的话,需要传递地址指针
  • 总结

c/c++:栈帧:函数调用,临时在栈空间stack上申请一个内存区域,供函数调用,主要存放形参和局部变量

咱们看看这个int类型变量的交换函数

当函数调用结束之后,这个临时内存会被释放的,消失了。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>void swap(int a, int b)
{int tmp = a;a = b;b = tmp;//三杯水交换printf("函数内部:%d,%d\n", a, b);
}void f76(void)
{int a = 10;int b = 20;printf("%d,%d\n", a, b);swap(a, b);printf("%d,%d\n", a, b);
}int main(void)
{f76();system("pause");return 0;
}

在这里插入图片描述
看见没,主函数那ab不动
swap内部,临时申请了变量,你内部怎么骚操作,与外面没关系

电脑的栈区,你swap函数是会在上面临时申请内存的,存放局部变量,形式参数
在这里插入图片描述
上面临时申请的那块空间,就是栈帧

实参传值,这种方式内存耗费大

main函数中有ab【mn】
a=10;m=23
b=20;n=57
在这里插入图片描述

swap函数中有ab
每个函数自己有的栈帧,开辟一个内存区域
tmp=a=10;
在这里插入图片描述

a=b=20;
在这里插入图片描述

b=tmp=10
在这里插入图片描述

swap内部ab确实不同了
但是与main没关系

函数调用这种实际参数,会copy给形参,这叫传递值,传值
是复制一份,而不是传地址指针,不是把ab的地址给它
这和数组不同

swap调用结束,它的栈帧释放
在这里插入图片描述
所以实参传值,不影响主函数的局部变量
调用函数的栈帧会释放,它不影响实参

在这里插入图片描述

你想改变实参的话,需要传递地址指针


void swap3(int* a, int* b)
{int tmp = *a;*a = *b;*b = tmp;//三杯水交换printf("函数内部:%d,%d\n", *a, *b);//ab已经是指针地址
}void f77(void)
{int a = 10;int b = 20;printf("%d,%d\n", a, b);swap3(&a, &b);//取地址printf("%d,%d\n", a, b);
}int main(void)
{f77();system("pause");return 0;
}

在这里插入图片描述
这波就不同了哦

你穿了int类型的地址进去,做解引用之后
操作的就是实参那个地址
必然改变

传递的不是mn本身
而是mn的地址给ab

在这里插入图片描述
然后a给tmp
在这里插入图片描述
b给a
在这里插入图片描述
把tmp拿去给
b
把地址中的57替换了
在这里插入图片描述
然后释放swap的栈帧
你发现,main中的变量,通过指针改了

在这里插入图片描述
这叫传址
通过函数内部的地址,解引用搞定main中的变量替换
在这里插入图片描述


总结

提示:重要经验:

1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

相关文章:

c/c++:栈帧,传值,传址,实参传值给形参,传地址指针给形参

c/c&#xff1a;栈帧&#xff0c;传值&#xff0c;传址&#xff0c;实参传值给形参&#xff0c;传地址指针给形参 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;此时学会c的话&#xff0c; 我所知道的周边的会c的同学&…...

玩元宇宙血亏后 蓝色光标梭哈AI也挺悬

蓝色光标2022年年度报告出炉&#xff0c;巨亏21.75 亿元&#xff0c;其中20.38亿亏损因商誉、无形资产及其他资产减值造成&#xff0c;而在实际亏损业务中&#xff0c;元宇宙占比不小。 蓝色光标在元宇宙领域的布局&#xff0c;主要通过三家子公司实施&#xff0c;分别为蓝色宇…...

生物---英文

标题 前言必学场景词汇及用法鸟类昆虫类哺乳类爬行类情境常用单词鸟类虫类哺乳类两栖类与爬行类分类与动物相关的习语前言 加油 必学场景词汇及用法 鸟类 1bird [b[插图]d] n.鸟bird’s-eye-view[ˈb[插图]dzaɪˌvju]adj.鸟瞰图的a bird’s-eye view鸟瞰a flock of bird…...

ENVI 国产高分2号(GF-2)卫星数据辐射定标 大气校正 影像融合

1.数据 高分2号卫星数据&#xff0c;包含&#xff1a; MSS-1\2多光谱数据&#xff0c;4m分辨率&#xff1b; Pan-1\2全色波段数据&#xff0c;0.8m分辨率。 2.处理软件 ENVI5.3 国产插件下载地址&#xff1a;ENVI App Store (geoscene.cn) 首先下载插件文件&#xff1b; …...

操作系统考试复习——第二章 进程控制 同步与互斥

进程控制一般是由OS中的原语来实现的。 大多数OS内核都包含了两大方面的功能&#xff1a; 1.支撑功能&#xff1a;1)中断处理 2)时钟管理 3)原语操作(原语操作就是原子操作。所谓原子操作就是一个操作中所有动作要不全做要不全不做) 2.资源管理功能&#xff1a;1)进程管理…...

mac gitstats查看git提交记录

一、介绍&#xff1a; 进一步来讲&#xff0c;Gitstats它是一个git仓库分析软件&#xff0c;它可以检查仓库并生成历史数据的统计信息。可以帮助你查看git仓库的提交状态&#xff0c;根据不同维度分析计算&#xff0c;并自动生成数据图表。 官网介绍&#xff1a;http://gitst…...

电脑系统错误怎么办?您可以看看这5个方法!

案例&#xff1a;电脑出现系统错误该如何解决&#xff1f; 【这几天长时间使用我的电脑&#xff0c;导致它的系统出现了错误。有没有小伙伴知道如何解决电脑系统出错的问题&#xff1f;求一个能快速解决的方法。】 电脑系统出现错误是使用电脑时难免会遇到的问题之一&#xf…...

九款顶级AI工具推荐

ChatGPT OpenAI开发的最强对话系统 地址&#xff1a;chat.openai.com ChatGPT能够在同一个会话期间内回答上下文相关的后续问题。其在短时间内引爆全球的原因在于&#xff0c;在网友们晒出的截图中&#xff0c;ChatGPT不仅能流畅地与用户对话&#xff0c;甚至能写诗、撰文、编…...

StringRedisTemplate-基本使用

StringRedisTemplate继承自RedisTemplate,在这里说明一下&#xff0c;当我们使用RedisTemplate往redis中存储java对象的时候&#xff0c;他会顺带着将该java对象的字节码文件也同时存进了内存中&#xff0c;这是为了实现自动反序列化Autowired private StringRedisTemplate red…...

ansible自动运维——ansible使用临时命令通过模块来执行任务

大家好&#xff0c;这里是天亮之前ict&#xff0c;本人网络工程大三在读小学生&#xff0c;拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识&#xff0c;希望能提高自己的技术的同时&#xff0c;也可以帮助到大家 另外其它专栏请关注&#xff1a; 锐捷数通实验&…...

python 之数据类型(四)

1、字符串&#xff08;String&#xff09; 使用双引号或者单引号中的数据&#xff0c;就是字符串 注&#xff1a;python中使用三引号时允许一个字符串跨多行&#xff0c;字符串中可以包含换行符、制表符以及其它特殊符号 a a c g print(a)运行结果&#xff1a; a c g1、下标 …...

洛谷P1345 无向图最小割点数

题意&#xff1a; 给出一副有 n n n个点&#xff0c; m m m条边的无向图&#xff0c;求出这副图的最小割点数 题意&#xff1a; 首先对于有向图&#xff0c;求他的最小割边&#xff0c;只需要令每条边的容量为 1 1 1&#xff0c;求出起点到终点的最大流就是最小割边数了。 容…...

适合程序员阅读的有用书籍:

几本适合程序员阅读的有用书籍&#xff1a; 1.《计算机程序设计艺术》(The Art of Computer Programming)是由Donald E. Knuth撰写的一系列著作&#xff0c;是计算机科学领域的经典之作。该系列著作共分为三卷&#xff0c;分别介绍了算法和计算机程序设计的基础知识和技巧。 …...

MySQL: 自动添加约束、更改(删除)表名和字段、删除表

目录 自动添加表的属性&#xff1a; 向表内插入数据&#xff1a; 查看表中的数据&#xff1a; 查看表结构&#xff1a; 查看表的详细结构&#xff1a; 更改表名和字段&#xff1a; 更改表名&#xff1a; 更改字段数据类型&#xff1a; 修改字段名&#xff1a; 添加字段…...

基于微博评论的细粒度的虚假信息识别软件

任务 目标:能检测单模态的虚假信息就可以,是个软件就可以 参考文章:基于多模态深度融合的虚假信息检测 Multi-modal deep fusion for false information detection 思路 多模态指的是多种不同类型的数据,比如图像、文本、音频等。虚假信息识别软件可以从这些不同类型的数据…...

Android 11.0 系统systemui状态栏下拉左滑显示通知栏右滑显示控制中心模块的流程分析

1.前言 在android11.0的系统rom定制化开发中,在系统原生systemui进行自定义下拉状态栏布局的定制的时候,需要在systemui下拉状态栏下滑的时候,根据下滑坐标来 判断当前是滑出通知栏还是滑出控制中心模块,所以就需要根据屏幕宽度,来区分x坐标值为多少是左滑出通知栏或者右…...

ROS学习第三十二节——xacro构建激光雷达小车

https://download.csdn.net/download/qq_45685327/87718396 在前面小车底盘基础之上&#xff0c;添加摄像头和雷达传感器。 0.底盘实现 deamo02_base.xacro <!--使用 xacro 优化 URDF 版的小车底盘实现&#xff1a;实现思路:1.将一些常量、变量封装为 xacro:property比如…...

中厂,面试就问了4道题,凉了!

你好&#xff0c;我是田哥 所谓的金三银四&#xff0c;已变成铜三铁四了。很多人基本上莫有面试机会&#xff0c;更可惜的是机会有了&#xff0c;却没有把握住。 加入我知识星球&#xff1a;免费做简历优化、简历包装、模拟面试... 今天早上&#xff0c;一个朋友和我说面试中被…...

22.轮播模块

学习要点&#xff1a; 1.轮播模块 本节课我们来开始了解 Layui 的内置模块&#xff1a;轮播模块。 一&#xff0e;轮播模块 1. 轮播模块&#xff0c;即跑马灯等轮播交互场景&#xff0c;先来看下基本设置&#xff1b; <div id"test" class"layui-carousel&qu…...

MYSQL命令小总结

一、创建查看 1.输入cmd&#xff0c;打开控制器&#xff0c;输入如下&#xff0c;打开MYSQL C:\Users\ASUS> mysql -u root -p 2.查看已有数据库 mysql> show databases; 3.建立数据库 4.使用数据库 use englishword;5.建立表单 CREATE TABLE user ( id INT primar…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...