网络网站建设公司排名,网业安全防护如何关闭,怎么更改网站首页图片尺寸,彬县网吧c/c#xff1a;栈帧#xff0c;传值#xff0c;传址#xff0c;实参传值给形参#xff0c;传地址指针给形参
2022找工作是学历、能力和运气的超强结合体#xff0c;遇到寒冬#xff0c;大厂不招人#xff0c;此时学会c的话#xff0c; 我所知道的周边的会c的同学栈帧传值传址实参传值给形参传地址指针给形参
2022找工作是学历、能力和运气的超强结合体遇到寒冬大厂不招人此时学会c的话 我所知道的周边的会c的同学可手握10多个offer随心所欲而找啥算法岗的基本gg 提示系列c学习的基础和高阶知识用于公司生产实践中实实在在的公司部署产品要用的因为c速度快 而java和Python速度慢自然往硬件里面部署算法啥的都得用c或者c因此本科学的c很重要后来的Python或者java就没有那么重要了 c/c系列文章 【1】cc语言优缺点visual studio2019如何新建项目写hello world程序 【2】c/c:gcc安装gcc编译hello world文件system函数调用系统命令sleep函数 【3】linux下gcc的编译过程和功能预处理编译汇编链接.c预处理为.i文件.s文件.o文件.exe文件 【4】c/cwindows平台下依赖的动态库c底层是汇编语言程序断点调试反汇编vs快捷键 【5】c/c数据类型常量变量标识符有符号整型无符号unsigned字符类型字符串类型实数类型浮点型科学计数法 【6】c/c2进制、8进制、10进制、16进制和进制之间的转换c语言输出匹配格式% 【7】c/c原码反码补码和常见的数据类型取值范围溢出 【8】c/c类型限定符printf输出格式putcharscanfgetchar 【9】c/c算术运算符赋值运算逻辑运算比较运算三目运算逗号运算数据类型转换 【10】c/c:顺序结构if else分支语句do while循环语句switch case break语句 【11】c/c:for循环语句分号不可省略表达式可以省略猜数字游戏跳转语句continuebreak避免写goto 【12】c/c:一维数组初始化数组循环打印数组计算数组存储空间数组元素个数数组逆序算法 【13】c/c二维数组数组的行数和列数求法sizeof数组初始化不同形式5个学生3门功课求学生总成绩和功课总成绩 【14】c/cvisual studio的代码快捷键VS设置自定义默认代码使用快捷键 【15】c/c:三维数组字符数组和字符串统计字符串中字符出现的频次scanf输入空格正则匹配表达式 【16】c/cgets()fgets()puts()fputs()strlen()字符串拼接函数 【17】c/c函数的作用分类随机数函数定义调用申明exit()函数多文件编程防止头文件重复 【18】c/c:指针指针定义和使用指针大小4字节野指针空指针*pNULL 【19】c/c万能指针泛型指针,const int *pint const *pint *const pconst int *const p,指针与数组p 【20】c/c指针pp-p*p/数组a1指针减指针指针实现strlen函数指针的比较运算指针数组多级指针 文章目录 c/c栈帧传值传址实参传值给形参传地址指针给形参[TOC](文章目录) c/c栈帧函数调用临时在栈空间stack上申请一个内存区域供函数调用主要存放形参和局部变量实参传值这种方式内存耗费大你想改变实参的话需要传递地址指针总结
c/c栈帧函数调用临时在栈空间stack上申请一个内存区域供函数调用主要存放形参和局部变量
咱们看看这个int类型变量的交换函数
当函数调用结束之后这个临时内存会被释放的消失了。
#includestdio.h
#includestring.h
#includestdlib.h
#includemath.h
#includetime.h
#includeWindows.hvoid 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】 a10m23 b20n57
swap函数中有ab 每个函数自己有的栈帧开辟一个内存区域 tmpa10
ab20
btmp10
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可以不考虑空间复杂度但是面试既要考虑时间复杂度最优也要考虑空间复杂度最优。