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

浅显易懂C语言指针!!!(三)

文章目录

  • Pointers as function arguments - call by reference//函数传值vs传引用

Pointers as function arguments - call by reference//函数传值vs传引用

#include<stdio.h>
void Increment(int a){//increment 增加 a = a + 1;//;函数中的是形式参数 形参} 
int main(){int a;a = 10;Increment(a);//传递进去的对应值 是实际参数  实参 printf("a is %d\n",a); 
}

上面代码结果a= 10;无法实现a= 11;

在这里插入图片描述

内存中的四个段,从上往下,分别是
堆heap
栈stack(局部变量都放在这里,只能在特定的函数或者特定的代码块进行访问和修改)
分配给静态或者全局变量(全局变量:在程序的任何地方都能访问和修改)
用来储存程序的指令
下面三个都是固定的,但是堆可以在运行的时候要求分配更多的内存

在这里插入图片描述
先进行main函数,然后main函数停止,跳转到increment函数
有一个栈帧来储存increment函数
increment使用完的栈帧会清除(局部变量的生命周期在函数执行期间一直存在)
恢复执行main函数,下一个语句是printf函数。printf函数不是用户定义的函数,它是一个库函数
在这里插入图片描述
main停止执行,现在执行printf函数,这种结构叫做 调用栈或者函数调用栈
栈顶的函数正在执行,栈是有固定大小的。
所以如果一个函数无限次调用另一个函数,就像是无限递归,那么栈会溢出,程序会崩溃。

如果要修改,这是我的办法。

#include<stdio.h>
void Increment(int a){//increment 增加 a = a + 1;//;函数中的是形式参数 形参printf("a is %d\n",a); printf("Address of variable a in increment = %d\n",&a);} 
int main(){int a;a = 10;Increment(a);//传递进去的对应值 是实际参数  实参 printf("Address of variable a in main = %d\n",&a);
}
//传值调用: 
//实参的值会 被拷贝/映射 到形参 
//当函数被调用时,就是把一个变量映射到另外一个变量  

下面是老师的办法:使用指针作为函数参数,就是在传引用
这样的函数调用不是传值,而是传地址。我们可以解引用这个变量来做一些操作。这就是传引用。能减少空间的使用。

#include<stdio.h>
void Increment(int *p){//increment 增加 *p = (*p) + 1;//;函数中的是形式参数 形参printf("Address of variable a in increment = %d\n",p);	
} 
int main(){int a;a = 10;Increment(&a);//传递进去的对应值 是实际参数  实参 printf("Address of variable a in main = %d\n",&a);printf("a is %d\n",a); }
http://www.lryc.cn/news/312630.html

相关文章:

  • 01 LM 算法及 Cpp 实现
  • 【网络安全架构】互联网正对中国社会、经济、文化等各个领域产生巨大影响‘
  • 【笔记】Android ServiceStateTracker 网络状态变化逻辑及SPN更新影响
  • 2PC和3PC的区别是什么
  • redis未设置密码被植入挖矿脚本
  • 轮询--一起学习吧之架构
  • 【开发工具】Git模拟多人开发场景理解分支管理和远程仓库操作
  • 从零学习Linux操作系统 第三十一部分 ansible常用模块介绍
  • 【Linux C | 网络编程】多播的概念、多播地址、UDP实现广播的C语言例子
  • HarmonyOS NEXT应用开发案例——滑动页面信息隐藏与组件位移效果
  • ffmpeg 转码过程中参数含义
  • 探索c++——了解c++的魅力
  • Oracle常用语句语法
  • 时隔n年再度会看Vue,Git
  • SpringCloud-Zuul网关的使用
  • mysql 中的一些重要函数
  • windows11配置电脑IP
  • 【JavaEE】_前端POST请求使用json向后端传参
  • 大语言模型系列-GPT-2
  • 30m二级分类土地利用数据Arcgis预处理及获取
  • LeetCode-22题:括号生成(原创)
  • 如何应对IT服务交付中的问题?看了本文DevOps就懂了
  • Ubuntu23.10禁用Wayland
  • Sora: 大型视觉模型背景、技术、局限性和机遇的综述
  • 比较 2 名无人机驾驶员:借助分析飞得更高
  • Vue开发实例(六)实现左侧菜单导航
  • [嵌入式系统-37]:龙芯1B 开发学习套件 -6-协处理器CP0之CPU异常处理与外部中断控制器的中断处理
  • 前端实现一个绕圆心转动的功能
  • 【vue.js】文档解读【day 2】 | 响应式基础
  • element-ui radio 组件源码分享