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

news2024/12/27 1:12:31

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,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

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

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

相关文章

[比赛简介]AMP®-Parkinson‘s Disease Progression Prediction

比赛链接&#xff1a;AMP-Parkinsons Disease Progression Prediction | Kaggle 比赛简介 本次竞赛的目标是预测MDS-UPDR评分&#xff0c;该评分衡量帕金森病患者的进展。运动障碍协会赞助的统一帕金森病评定量表&#xff08;MDS-UPDRS&#xff09;修订版是对与帕金森病相关…

使用Charles进行HTTPS抓包

charles安装 下载地址 https://www.charlesproxy.com/download/latest-release/ 我安装的是charles-4.6.4版本 配置手机 注意: 一定要在同一网段 mac电脑的ip地址 手机的ip地址 使用同样的命令 长按配置代理,连接到电脑 此时抓包,会看到一堆unknown, 因为请求的是https…

Web安全 文件上传靶场搭建(玩转整个 文件上传 环境.)

Web安全 文件上传靶场搭建 文件上传漏洞是指 Web 服务器允许用户将文件上传至其文件系统&#xff0c;但这些文件可能并没有经过充分的验证&#xff0c;如文件名称、类型、内容或大小等。未能正确执行这些限制就意味着即使最基本的图像上传功能也可能用于上传任意具有潜在危险的…

GitHub 现在允许大规模启用私有漏洞报告

GitHub 宣布私人漏洞报告现已普遍可用&#xff0c;并且可以在属于组织的所有存储库上大规模启用。 启用后&#xff0c;安全研究人员可以使用此专用通信渠道向开源项目的维护人员私下披露安全问题&#xff0c;而不会意外泄露漏洞详细信息。 GitHub 的埃里克图利 (Eric Tooley)…

这些美国名校的AI人工智能大牛,你知道几个?

CS专业被US News评为就业TOP 100职业第一名、STEM职业第一名、技术类职业第一名。 AI人工智能&#xff0c;随着GPT的横空出世已成为最热门的CS专业。“深度学习”和“神经网络”等是新一代人工智能的重要代表&#xff0c;如今在面部识别、语音输入、基因医疗等重要领域被广泛应…

AI Stable Diffusion Prompt参数【二】之 生成效果查验

AI Stable Diffusion Prompt参数【二】之 生成效果查验 效果国漫风生成参数配置prompt&#xff1a;Negative prompt:Model:Steps:Sampler:CFG scale:Clip skip:Model hash:Hires upscale:Hires upscaler:Denoising strength: 全部效果 效果 国漫风生成参数配置 prompt&#xf…

Windows Docker 端口占用错误解决

Windows Docker 端口占用错误解决 错误来源 Error invoking remote method ‘docker-start-container’: Error: (HTTP code 500) server error - Ports are not available: exposing port TCP 192.168.0.157:6555 -> 0.0.0.0:0: listen tcp 192.168.0.157:6555: can’t bi…

发展文旅夜游,活络城市文化生态

城市是一个对外的窗口&#xff0c;其夜间文化生态值得进一步挖掘&#xff0c;发展夜间文旅产业&#xff0c;并活络城市文化生态是重要的城市发展举措。实现这一目标需要保护和利用好城市夜景资源、挖掘城市夜生活文化内涵以及利用特色文化吸引夜游人流量。 第一、要保护和利用好…

YOLOv5实时检测调用usb摄像头 [ jetson nano -Ubuntu18.4 - Astra pro相机 ]

在基于rosmaster小车的jetson nano主板部署yolo v5目标检测网络的时候发现无法打开摄像头Astra pro进行实时监测&#xff0c;所以记录一下解决方法&#xff1a; 0.确认摄像头可用 首先先参考我上一篇博客所记录的方法打开USB摄像头&#xff1a; Jetson Nano打开USB摄像头&…

01-java基本概念

1、语言背景 Java语言是美国Sun公司&#xff08;Stanford University Network&#xff09;在1995年推出的计算机语言 Java之父&#xff1a;詹姆斯高斯林&#xff08;James Gosling&#xff09; 2009年&#xff0c;Sun公司被甲骨文公司收购&#xff0c;所以我们现在访问oracle官…

亚马逊美国站带绳窗帘

带绳窗帘 如果您在亚马逊商城发布商品&#xff0c;则必须遵守适用于这些商品和商品信息的所有联邦、州和地方法律以及亚马逊政策&#xff08;包括本政策&#xff09;。 本政策涵盖的带绳窗帘 带绳窗帘是一种室内用窗帘&#xff0c;可通过一根吊绳控制升降。此类商品包括但不…

全注解下的SpringIoc 续1-依赖注入

上篇文章介绍了ioc的基本用法和ComponentScan注解的使用&#xff0c;这篇文章我们来看看依赖注入的部分。 提起依赖注入&#xff0c;想必大家肯定会想到Autowired注解&#xff0c;的确&#xff0c;它是我们用的最多的一个。 还记得容器的顶级接口BeanFactory 吗&#xff0c;它定…

函数栈帧的创建和销毁【汇编语言理解】

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

echarts双Y轴对齐;echarts堆叠柱状图;echarts数据集dataset结构;

提示&#xff1a;主要解决三个问题&#xff1a;1.echarts双Y轴设置和对齐 2.echarts堆叠柱状图 3.echarts数据集dataset结构 一、echarts双Y轴设置和对齐 1.双Y轴&#xff1a; yAxis两组数据&#xff0c;且series有组数据设置 yAxisIndex: 1 代表使用哪个Y轴的数据展示&#…

算法训练Day37:738.单调递增的数字 968.监控二叉树

文章目录 单调递增的数字题解 监控二叉树题解 单调递增的数字 CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsMedium (50.32%)3690--0 Tags 贪心 | 数学 Companies 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个…

【源码解析】多数据源 dynamic-datasource快速入门及源码解析

快速入门 依赖引入 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.1</version></dependency>配置文件 spring.datasource.druid.stat-view-se…

在不确定性时代,亚马逊云科技让企业拥有持续增长力

2023年3月29日「哈佛商业评论-未来管理沙龙」活动盛大启幕&#xff0c;此次沙龙活动以穿越周期的力量为主题方向&#xff0c;以解码跨国企业持续增长源动力为主旨&#xff0c;希望为企业高层管理者们带来更多思考和启迪。 作为特邀嘉宾&#xff0c;亚马逊全球副总裁、亚马逊云…

【数据库】数据库的基础知识

目录 前言 1、 查看数据库 1.1、查看所有数据库&#xff08;show databases;&#xff09; 1.2、创建数据库之后&#xff0c;查看创建的数据库的基本信息。 2、 创建数据库 2.1、直接创建数据库&#xff08;create database [数据库名];&#xff09; 2.2、创建数据库的时…

如何将b站缓存的m4s视频转换成mp4格式

阅读前请看一下&#xff1a;我是一个热衷于记录的人&#xff0c;每次写博客会反复研读&#xff0c;尽量不断提升博客质量。文章设置为仅粉丝可见&#xff0c;是因为写博客确实花了不少精力。希望互相进步谢谢&#xff01;&#xff01; 文章目录 阅读前请看一下&#xff1a;我是…

【Unity VR开发】结合VRTK4.0:瞬移

语录&#xff1a; 到不了的地方都叫做远方&#xff0c;回不去的世界都叫做家乡&#xff0c;我一直向往的却是比远更远的地方。 前言&#xff1a; 在VR场景中的移动主要有&#xff1a;瞬移和平移。瞬移相当于在虚拟世界中标记出目标位置&#xff0c;并自动传输到该位置&#xff…