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

【C++ Primer 学习札记】函数传参问题

 

参考博文:

https://blog.csdn.net/weixin_40026739/article/details/121582395

什么是形参(parameter),什么是实参(argument)

1. 形参

在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参

形参是函数声明或定义时列出的参数,本质是函数作用域内的局部变量,用于接收调用时传入的数据。形参在函数被调用前没有实际内存分配,仅作为占位符存在。

特点​​:

在函数声明和定义中声明,例如:int add(int a, int b)中的a和b是形参。

形参的类型必须明确指定,且可以是变量或引用类型(如指针或引用)。

形参的作用域仅限于函数内部,函数执行结束后会被释放。

参考【C语言编译】C语言的函数调用的过程_c语言函数的调用过程是什么-CSDN博客

函数调用过程中,栈区(stack)可以存放函数的参数值,局部变量的值等,由编译器自动分配释放

2. 实参

给形参传递值的变量称为实际参数,简称实参

实参是函数调用时传递给形参的具体值或变量,包含实际的数据,用于初始化形参

特点​​:

可以是常量、变量、表达式、指针或引用。例如:add(3, 5)中的3和5是实参。

实参的类型必须与形参匹配,否则会触发隐式类型转换(如char转int),若无法转换则报错。

实参的值通过​​值传递​​、​​引用传递​​或​​指针传递​​方式传递给形参,其中值传递会复制数据,后两者直接操作内存地址

这里列举形参为指针以及指针的指针的情况:

1. 形参为指针,实参为变量的地址

当数据类型需要占用大量内存时候,可以避免数据拷贝

void test_ptr(int* data){std::cout<<*data<<std::endl;
}
int main() {int data = 1;test_ptr(&data);return 0;
}

输出为:

1

2. 形参为指针,实参为指针

数组变量,本质上是数组首元素的地址

void test_ptr4(int* data){std::cout<<data[1]<<std::endl;data[1] = 2;std::cout<<data[1]<<std::endl;
}
int main() {int* data = nullptr;data = new int[10];data[1] = 1;test_ptr4(data);std::cout<<data[1]<<std::endl;delete[] data;return 0;
}

输出:

1

2

2

特别注意:如果形参为指针时,在函数内部对其动态分配内存,是不能影响到外部的指针变量的,如下所示:

void test_ptr3(int* data){data = new int[10];// data[1] = 1;data[1] = 1;std::cout<<data[1]<<std::endl;
}
int main() {int* data = nullptr;test_ptr3(data);std::cout<<data[1]<<std::endl;//errorreturn 0;
}

输出:

1
段错误 (核心已转储)

3. 形参为指针的指针,实参为指针变量的地址

这里可以支持在函数内部对外部的空指针进行动态分配内存

void test_ptr2(int** data){*data = new int[10];(*data)[1] = 1;
}
int main() {int* data = nullptr;test_ptr2(&data);std::cout<<data[1]<<std::endl;delete[] data;return 0;
}

输出为:

1

 

相关文章:

  • Xilinx XCAU10P-2FFVB676I 赛灵思 Artix UltraScale+ FPGA
  • Xilinx 7Series\UltraScale FPGA MultiBoot Fallback
  • 力扣-三数之和
  • 浙大团队研发Earth Explorer系统,探索深时演化/地学剖面/科研场景,赋能深时地球科学研究
  • 可理解性输入:逛超市
  • 教师角色的转变:从知识传授者到学习引导者
  • LeetCode 1004. 最大连续1的个数 III
  • 友达15.6寸G156HAN02.3工业显示模组
  • Redis String 设计思想深度解析
  • Datacom-hcia~Datacom-hcie学习笔记索引
  • 力扣-有效三角形的个数
  • 初识Linux · NAT 内网穿透 内网打洞 代理
  • 从零基础到最佳实践:Vue.js 系列(6/10):《Composition API(组合式 API)》
  • Redis集群在NoSQL中的应用与优化策略
  • 如何用数据可视化提升你的决策力?
  • CNN vs ViT:图像世界的范式演进
  • 英伟达CEO黄仁勋COMPUTEX 2025演讲实录:AI工厂时代已来,Blackwell架构全面投产
  • Java之函数式接口、lambda表达式、stream流操作、Optional容器、方法引用
  • 基于两阶段交互控制框架的互联多能系统协同自治优化
  • 架构图 C4 规范简介
  • 阿胶在那种网站做推广好/app软件推广怎么做
  • 网上购物网站建设论文6/微博热搜榜排名今日
  • seo对网站的重要性/宁波seo网站
  • 最近北京病毒感染是什么情况啊/seo赚钱吗
  • 湖南省住房与城乡建设厅网站/百度seo怎么样优化