-
C++结构体作为函数参数传参
2020-06-25 10:45:56#include<iostream> using namespace std; #include<... *结构体作为函数参数传参 */ //值传递 void printStufdent1(struct Student st3) { cout << "子函数" << endl; st3.age .#include<iostream> using namespace std; #include<string> //结构体 struct Student { string name; int age; int score; }st3; /* *结构体作为函数参数传参 */ //值传递 void printStufdent1(struct Student st3) { cout << "子函数" << endl; st3.age = 100; cout << "名字:" << st3.name << " 年龄:" << st3.age << " 分数:" << st3.score << endl; } //地址传递 void printStufdent2(struct Student * p) { p->age = 200; cout << "子函数" << endl; cout << "名字:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl; } int main() { struct Student st1; st1.name = "zhangsan"; st1.age = 18; st1.score = 60; //cout << "名字" << st1.name << "年龄" << st1.age << "分数" << st1.score<< endl; struct Student st2={"李四",20,70}; // cout << "名字" << st2.name << "年龄" << st2.age << "分数" << st2.score<< endl; st3.name = "王五"; st3.age = 19; st3.score = 59; printStufdent1(st3); cout << "main函数" << endl; cout << "名字:" << st3.name << " 年龄:" << st3.age << " 分数:" << st3.score << endl; printStufdent2(&st3); cout << "main函数" << endl; cout << "名字:" << st3.name << " 年龄:" << st3.age << " 分数:" << st3.score << endl; system("pause"); }
从结果我们知道结构体作为函数的参数传参有两种形式
-
C语言函数作为函数参数
2019-09-13 11:35:15c,c++中是可以向Python那样将函数作为函数参数的,具体实现方法如下C语言函数作为参数
为了满足DRY思想,减少代码的重复性,考虑将函数作为参数传入另一函数中。C语言是可以将函数作为函数参数的。
用到的方法是函数指针。
首先需要明确的是, 在C语言中,函数名就是函数的首地址,所以将函数作为函数参数的思路是将函数地址传入,形参是一个指针类型的变量,形参的基类型为函数原型。
参数原型为:
ElemType(*FunctionName)(ElemType, ElemType, ......)
其中:ElemType
为声明(如int, float, double,struct等)
以冒泡排序为例借助判断大小函数进行数组排序的具体实现方法如下:#include <stdio.h> #define YES 1 #define NO 0 ///*判断函数,进行元素大小判断,increase判断大小比较*/ int compare(int a, int b, int increase) { if (increase > 0) { if (a > b) return YES; else return NO; } else { if (a < b) return YES; else return NO; } } /*冒泡排序进行数组排序*/ void OrderArr(int arry[], int(*compare)(int, int, int), int length, int increase = 1) { for (int i = 0; i < length - 1; i++) { for (int j = 0; j < length - i - 1; j++) { if (compare(*(arry + j), *(arry + j + 1), increase)) { int temp = *(arry + j + 1); *(arry + j + 1) = *(arry + j); *(arry + j) = temp; } } } } /*输出函数*/ void Print(int a[], int length) { for (int i = 0; i < length; i++) { printf("%d ", *(a + i)); } printf("\n"); } int main() { int a[5] = { 1, 4, 2, 6, 3 }; //增序排列数组 OrderArr(a, compare, 5); Print(a, 5); //降序排列数组 OrderArr(a, compare, 5, -1); Print(a, 5); }
-
python 函数参数(必选参数、默认参数、可选参数、关键字参数)
2018-07-11 13:25:06http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001374738449338c8a122a7f2e047899fc162f4a7205ea3000########################################################函数参数:...参考:
########################################################
函数参数:必选参数、默认参数、可选参数、关键字参数
########################################################
默认参数:放在必选参数之后
计算x平方的函数:
- def power(x):
- return x*x
power(5)
计算x的立方
- def power(x):
- return x*x*x
这样的话每次计算不同幂函数都要重写函数,非常麻烦,可使用以下代码计算:
- def power(x, n):
- s=1
- while n>0:
- n=n-1
- s=s*x
- return s
使用修改后的power函数,可以计算任意n次方
不过每次调用函数必须输入两个参数,使用默认参数可以进一步简化函数:
- def power(x, n=2):
- s=1
- while n>0
- n=n-1
- s=s*x
- return s
设置默认参数时注意事项:必选参数在前,默认参数在后
默认参数最大好处:降低调用函数的难度
学生注册,需要传入name和gender:
- def enroll(name, gender):
- print 'name :',name
- print 'gender :',gender
如果继续传入年龄、城市等信息咋么办,这会使得调用函数的复杂度大大增加:把年龄、城市设为默认参数可以简化函数:
- def enroll(name, gender, age=6, city='Beijing'):
- print 'name :',name
- print 'gender :',gender
- print 'age :',age
- print 'city :',city
有多个默认参数化时,调用的时候,既可以按顺序提供默认参数,比如调用enroll('zj', 'M', 8);也可以不按顺序提供部分默认参数,如enroll('Ad', 'a', city='dad')
默认参数也有缺陷的地方:
- def add_end(L=[]):
- L.append('END')
- return L
原因:函数在定义时,默认参数L所制定的地址已经确定,而L是一个list,所以每次调用该函数时,如果改变了L的内容,则下次调用时,默认参数的内容就会改变
note: 默认参数必须指向不变对象!!!
如上代码可使用None实现:
- def add_end(L=None):
- if L is None:
- L=[]
- L.append('END')
- return L
##################################################################
可变参数:就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个
在参数前面加上*就是可变参数。在函数内部,参数numbers接收得到的是一个tuple,调用该函数时,可以传入任意个参数,包括0个参数:
- def calc(*numbers):
- sum=0
- for n in numbers:
- sum= sum+n*n
- return sum
如何调用一个list或者tuple,可以如上所示,在list或tuple前面加上一个*号,把list或tuple的元素变成可变参数传进去
####################################################################
关键字参数
允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装成一个dict
使用**表示关键字参数
函数person不仅可以只传入必选参数,也可以传入任意个数的关键字参数
也可以类似可变参数,先组装一个dict,然后,把该dict转换为关键字参数传进去:
- kw={'city':'Beijing', 'job':'Engineer'}
- person('Jack', 24, city=kw['city'], job=kw['job'])
- person('Jack' ,24, **kw)
#############################################################
参数组合
参数定义的顺序:必选参数、默认参数、可变参数和关键字参数
#######################################################
in summary:
默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict
-
python3 函数签名简介 验证函数参数
2020-07-06 10:45:58一个函数或方法,它使用*args和**kwargs作为参数,这样使得它比较通用, 但有时候你想检查传递进来的参数是不是某个你想要的...通过函数签名的parameters属性,获取函数参数。 # 注意是小写的signature from inspect一个函数或方法,它使用*args和**kwargs作为参数,这样使得它比较通用, 但有时候你想检查传递进来的参数是不是某个你想要的类型。可以使用函数签名来做验证
函数签名对象,表示调用函数的方式,即定义了函数的输入和输出。
在Python中,可以使用标准库inspect的一些方法或类,来操作或创建函数签名。
获取函数签名及参数
使用标准库的signature方法,获取函数签名对象;通过函数签名的parameters属性,获取函数参数。
# 注意是小写的signature from inspect import signature def foo(value): return value # 获取函数签名 foo_sig = signature(foo) # 通过函数签名的parameters属性,可以获取函数参数 foo_params = foo_sig.parameters
创建函数签名
使用类Parameter的实例创建函数参数列表;使用Signature类,接受函数参数列表,实例化出函数签名实例。
# 注意是首字母大写的Signature from inspect import Signature, Parameter # 创建一个函数参数列表,列表内的元素由类Parameter的实例组成 # Parameter实例化时,依次接受参数名、参数类型、默认值和参数注解 # 默认值和参数类型默认为空,这里的空值不是None,而是Parameter.empty,代表没有值 parms = [Parameter('x', Parameter.POSITIONAL_OR_KEYWORD), Parameter('y', Parameter.POSITIONAL_OR_KEYWORD), Parameter('z', Parameter.KEYWORD_ONLY, default=9)] # 使用Signature类,接受函数参数列表,实例化出函数签名实例 sig = Signature(parms)
检查函数参数是否匹配签名
使用函数签名的bind的方法,检查函数参数是否匹配签名。
延续上面的例子,通过函数签名的bind方法,接受函数参数,如果匹配,返回参数BoundArguments实例,如果不匹配,则抛出TypeError,并给出详细的异常信息。
通过BoundArguments实例的属性,可以获取函数签名、参数的值等内容。
bound_args_01 = sig.bind(1, 2, z=3) # <BoundArguments (x=1, y=2, z=3)> bound_args_02 = sig.bind(1, 2) # <BoundArguments (x=1, y=2)> bound_args_03 = sig.bind(1) # TypeError # missing a required argument: 'y'
-
ES6函数参数解构
2018-10-10 20:23:44ES6函数参数解构 常规的JavaScript若要给函数传递的参数是一个对象,需要像下面这样来实现: function sayName(person) { if(Object.prototype.toString.call(person) == '[object Object]') { console.log( `${... -
C++(笔记)容器(vector)作为函数参数如何传参
2017-05-17 17:51:54一、大致以下类型 void 函数名( vector< int> obj ); void 函数名( vector* pobj );... // 在函数内不能改变 pobj 指向的对象 ,//调用时不会调用拷贝构造函数 void 函数名( vector< int>& obj ); void -
js匿名函数作为函数参数 (返回值作为另一个函数的参数)
2015-12-23 16:23:31js匿名函数作为函数参数 (返回值作为另一个函数的参数) -
函数参数的默认值
2018-01-21 21:59:47函数参数的默认值 基本用法 ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 function log(x, y) { y = y || 'World'; console.log(x, y);}log('Hello') // Hello Worldlog('Hello', 'China... -
函数指针作为函数参数及函数作为函数参数
2018-12-02 10:47:07转载于:http://blog.csdn.net/vlily/article/details/7244682 转载于:http://blog.csdn.net/shengnan_wu/article/details/8116935 转载于:http://blog.csdn.net/callmeback/article/details/4242260/ ... -
python函数参数的默认参数、元组参数和字典参数例解
2019-01-30 10:54:33python函数除了不带参数,带固定参数之外,还有另外三类函数参数有重要使用价值,是提升python水平需要强化的内容。它们是默认参数、元组参数和字典参数。下面举例子说明。 1.默认参数 即在函数定义时赋值的参数。... -
C语言 enum作为函数返回值及函数参数
2018-08-11 15:19:561.作为返回值 作为函数参数 https://bbs.csdn.net/topics/340095770 -
C++函数参数的默认值
2018-11-03 13:30:20一、函数参数的默认值 1:函数参数的默认值就是说在声明函数或者定义函数的时候直接在参数后给赋值,这样在函数调用的时候调用方可以不用再给传值,它会默认使用它的默认值 错误实例: 在给函数参数赋默认值... -
JavaScript—函数参数:默认参数和剩余参数
2017-03-03 17:13:06函数参数(Function parameter)EDIT 从ECMAScript 6开始,有两个新的类型的参数:默认参数(default parameters),剩余参数(rest parameters)。 默认参数(default parameter) 在JavaScript中,函数参数的... -
Shell脚本函数定义和函数参数
2017-07-06 15:46:45这篇文章主要介绍了Shell脚本函数定义和函数参数,分别介绍了2种自定义函数的方法,以及定义带返回值函数的方法,需要的朋友可以参考下 一、Shell函数 本教程目前为止所有脚本都是从头到尾执行。这样做很好,... -
指针作函数参数,引用作函数参数以及内存释放
2012-12-03 21:32:12指针作为函数参数 1. 函数参数概念: 形参:被调函数中的参数 实参:主调函数中的参数 形参和实参: C 中函数中实参和形参是按值传递的,调用函数后,会将实参的值拷贝给形参(即形参和实参之间是没有... -
函数参数默认值设置
2017-03-15 11:23:06函数参数默认值设置规则: 一个函数中如果有多个形参,那么可以给该函数的部分或 全部参数设置默认值。 设置默认值顺序,在给部分参数设置默认值的时候,需要从右向左依次进行设置,在调用这个函数时,实参匹配的... -
C语言中函数参数传递的三种方式
2017-07-22 21:09:40C语言中函数参数传递的三种方式(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。(2)传址,就是传变量的地址... -
Typescript 函数参数占位
2018-04-07 15:34:53如果你没有在tsconfig中设置noUnusedParameters为True的话,当你函数参数声明但没有使用的时候就会报错:’parameter’ is declared but its value is never read.可是在一些回调函数当中,我们不得不声明一个以后... -
Object-C 函数参数语法
2018-03-15 20:56:50Object-C函数参数 Object-C的函数参数语法比较特别 通常的编程语言比如Java和C++ 都是 void p_fun_test(int array, int size); shell的函数参数则是匿名的 通过$1这样的数字来表示不同顺序上的参数 function p_fun_... -
php中函数参数传递
2017-04-29 22:41:52php中函数参数传递有形参传递(借用c语言等编程语言的说法)。 即就是把变量的值赋值给函数的参数,对函数参数所做的一切操作都与原始变量无关。 -
python 函数参数:必选参数、默认参数、可变参数、关键字参数 和 命名关键字参数
2017-03-04 23:38:02python 函数参数:必选参数、默认参数、可变参数、关键字参数 和 命名关键字参数 在 Python 中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数 5种参数形式。 这 5 种参数都可以组合... -
js匿名函数作为函数参数
2015-03-06 10:25:42由衷的感叹,js真是烦。 学到现在,渐渐理解了什么是:语言都是通用的,没有好不好,只有擅长不擅长。...温故知新,今天又回味了一遍,匿名函数作为函数参数。 代码很短,五脏俱全。 function t -
用数组名作函数参数
2019-05-31 18:46:10关于用数组名作函数参数有两点要说明: (1) 如果函数实参是数组名,形参也应为数组名(或指针变量),形参不能声明为普通变量(如int array;)。实参数组与形参数组类型应一致(现都为int型),如不一致,结果将出错。 (2) 需要... -
vim YCM补全函数参数配置方法
2020-07-12 11:48:41这里推荐一个插件,可以提供YCM对于函数参数的自动补全。 基础配置 向.vimrc中添加以下代码: inoremap <silent><expr> ( complete_parameter#pre_complete("()") smap <c-j> <Plug>... -
C++ (带有默认参数的函数参数)缺省函数参数
2019-05-05 19:35:06在声明函数原型时,为一个或者多个形参指定默认值,以后调用这个函数时,若省略某一个实参,c++则自动的以默认值作为相应参数的值。 实列说明: #include<iostream> using namespace std; int add(int x=4,... -
HashMap的带函数参数方法
2019-05-01 17:51:52HashMap的带函数参数方法 文章目录HashMap的带函数参数方法1. 如果key没有value,或者连key都没有 就怎么怎么滴 computeIfAbsent()2. 如果存在key有value就怎么怎么滴 computeIfPresent()3. 针对某个key 怎么怎么滴 ... -
C#函数参数默认值及指定传参
2018-07-20 15:16:59通过函数参数设置默认值,加上调用的一些小技巧,可以使代码变得简洁优雅,同时也简化了调用。本文介绍C#函数参数默认值初始化,调用函数传参的顺序传参、指定参数传值,函数默认参数值的工作机制。 -
C语言二维数组作为函数参数传递
2018-06-07 21:43:37二维数组作为函数参数 二维数组作为函数的参数,实参可以直接使用二维数组名,在被调用函数中可以定义形参所有维数的大小,也可以省略以为大小的说明。例如: void find(char a[3][10]); void find (char a[ ]... -
c语言中函数参数处理顺序以及默认参数原则
2019-07-04 11:20:59c语言中函数参数处理顺序 下面我们来看2个案例,分析下c语言中函数参数处理顺序。 第一个: #include "stdio.h" void fn(int a,int b,int c) { printf("%d,%d,%d", a, b, c); } void main() { int a = 3; .... -
数组作为函数参数使用方法总结
2019-10-24 22:07:43C/C++数组作为函数参数使用方法总结 一维数组作为函数参数的三种方法: 方法1:形参与实参都用数组; 方法2:形参与实参都用对应数组的指针; 方法3:实参用数组名,形参用引用; 二维数组作为函数参数的四种方法...
-
苹果网址一键免签绿标打包工具1.3.0
-
阿里云云计算ACP考试必备教程
-
Kotlin协程极简入门与解密
-
YD5059-2005 电信设备安装抗震设计规范.pdf
-
WH80QD调质型高强钢板产地舞钢执行舞钢推荐标准调质热处理.doc
-
转行做IT-第1章 计算机基础
-
基于ARM的实时监控系统 iTop-4412 UVC摄像头 MJPG-streamer
-
【数据分析-随到随学】量化交易策略模型
-
朱有鹏老师嵌入式linux核心课程2期介绍
-
数据库课程设计(基于高校图书管理系统)
-
springboot项目部署到服务器.md
-
vs2019 dll使用
-
酒店客房管理系统的设计与实现_SSH_毕业设计.rar
-
基于Qt+OpenCV的人体特征检测系统 iTop-4412 ARM opencv QT
-
algs4|Dijkstra的双栈算术表达式求值算法Java
-
【数据分析-随到随学】互联网行业业务指标及行业数
-
信息安全基础1.2用户与组
-
云计算基础-Linux系统管理员
-
std::shared_ptr的std::move()移动语义底层分析
-
【数据分析-随到随学】Mysql数据库