c++语言函数大全及详解,c++基本语法总结
Yyds干货库存
前面写的C ()的语法基础:该系列文章旨在短时间内复习C/C语法中的重点和易错点,巩固算法竞赛和写题过程中常用的语法知识,准确解决学过但忘了的问题,为算法题刷题打下坚实的基础。
9.1函数基础一个典型的函数定义包括以下几个部分:返回类型、函数名、0个或多个形参的列表、函数体。
9.1.1写函数让我们写一个求阶乘的程序。该过程如下:
int fact(int val)
{
int ret=1;
while(值1)
ret *=val-;
返回ret
}函数名为fact,作用于整型参数,返回整数值。return语句负责结束事实并返回ret的值。
注意:如果函数名和函数参数(类型)相同,您将报告错误9.1.2并调用函数int main()
{
int j=fact(5);
cout 5!is‘j endl;
返回0;
}函数调用完成两个任务:一是用实际参数初始化函数的对应参数,二是将控制权转移给被调用的函数。此时,主调优功能的执行被暂时中断,调优功能开始执行。
9.1.3参数和自变量是参数的初始值。第一个参数初始化第一个参数,第二个参数初始化第二个参数,依此类推。参数和实参的类型和数量必须匹配。
事实(“你好”);//错误:参数类型不正确。
fact();//错误:参数数量不足
事实(42,10,0);//错误:参数太多
事实(3.14);//正确:该参数可以转换为int类型,相当于fact(3);参数也可以设置为默认值,但所有默认值必须是最后一个。当传入的实参数小于形参数时,最后没有传入的形参将使用默认值。
9.1.4函数的参数表函数的参数表可以为空,但不能省略。
Void f1() {/* …。*/} //隐式定义空参数列表。
void F2(void){/*…*/}//*/}/显式定义空参数列表。参数列表中的参数通常用逗号分隔,其中每个参数都是带有声明符的声明。即使两个形参的类型相同,也必须写出两种类型:
Int f3(int v1,v2) {/* … */} //错误
Intf4 (intv1,int v2){/*…*/}/正确9.1.5函数返回类型大多数类型都可以作为函数的返回类型。一种特殊类型的返回是void,这意味着函数不返回任何值。函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针。
9.1.6局部变量、全局变量和静态变量局部变量只能在函数内部使用,全局变量可以在所有函数内部使用。当局部变量与全局变量同名时,局部变量优先。
静态变量相当于在函数中打开了一个只有函数本身才能访问的全局变量。
静态变量只有在第一次执行时才会被初始化,之后会被跳过,直接在函数中使用。会直接开进堆空间,不用担心重名问题静态int CNT=0;9.1.7内联函数内联函数在通用函数前面有一个内联修饰符。内联函数是直接复制并“嵌入”到主函数中的,即内联函数的代码直接放在内联函数的位置上。这不同于一般的函数。当主函数调用通用函数时,指令跳转到被调用函数的入口地址。被调用的函数执行后,指令跳回到主函数继续执行下面的代码;因为内联函数直接把函数的代码放在函数的位置,所以没有指令跳转。只有一个指令按顺序执行通用函数的代码段,它放在内存中的某个位置。当程序调用yes时,指令跳转;下一次程序调用它是,指令再次跳转;程序中多次调用内联函数,会将内联函数的代码复制几份,放在相应的位置。inline函数一般在头文件中定义,而general函数在头文件中声明,inline int f(int x)在cpp中定义。
{
x=5;
}当调用
9.2参数传递9.2.1参数传递初始化非引用类型的变量时,将初始值复制到变量中。此时,对变量的更改不会影响初始值。
#包括iostream
使用命名空间std
int f(int x)
{
x=5;
}
int main()
{
int x=10
f(x);
cout x endl
返回0;
}9.2.2传递引用参数当函数的参数是引用类型时,参数的修改会影响实参的值。引用的作用:避免复制,让函数返回额外的信息。
#包括iostream
使用命名空间std
int f(int x)
{
x=5;
}
int main()
{
int x=10
f(x);
cout x endl
返回0;
}9.2.3函数中数组参数对数组中值的修改会影响函数外的数组。传递数组就是传递引用。
一维数组参数的写入:
//虽然形式不同,但这三个打印功能是等效的
void print(int *a) {/* … */}
void print(int a[]) {/* … */}
void print(int a[10]) {/* … */}
#包括iostream
使用命名空间std
void print(int a[])
{
for(int I=0;我我)
cout a[I]endl;
}
int main()
{
int a[10];
for(int I=0;我我)
a[I]=I;
打印(一份);
返回0;
}多维数组参数的编写:
在多维数组中,除了第一维,其他维的大小都必须指定。
//在多维数组中,除了第一维,其他维度的大小都必须指定。
void print(int (*a)[10]) {/* … */}
void print(int a[][10]) {/* … */}
#包括iostream
使用命名空间std
作废打印(int a[][10])
{
for(int I=0;我我)
{
for(int j=0;j j)
cout a[I][j]“”;
cout endl
}
}
int main()
{
int a[10][10];
for(int I=0;我我)
for(int j=0;j j)
a[I][j]=j;
打印(一份);
返回0;
}注意:函数中shape参数组的sizeof length实际上是其指针的长度。
#包括iostream
使用命名空间std
void foo(int b[])
{
b endl的cout sizeof
}
int main()
{
int a[10];
endl的cout sizeof
foo(a);
返回0;
}输出:
9.2.4参数的默认值只能在最后一个参数后设置。当调用一个函数时,你可以不使用缺省参数,它会跟随缺省值。如果输入一个值,将使用输入值#include iostream。
使用命名空间std
void foo(int a,int b=10)
{
cout a b endl
}
int main()
{
foo(5);
返回0;
}9.3返回类型和返回语句return语句终止当前正在执行的函数,并将控制权返回到调用该函数的地方。return语句有两种形式:
返回;
返回表达式;9.3.1无返回值的函数无返回值的return语句只能用在返回类型为void的函数中。返回void的函数不要求有return语句,因为return会在这类函数的最后一句后隐式执行。有些返回的函数,比如int,必须加上return,否则会随机返回值,导致一个不确定的值。通常,如果void函数希望在其中间位置提前退出,可以使用return语句。return的这种用法有点类似于我们使用break语句退出循环。void swap(int v1,int v2)
{
//如果两个值相等,不需要交换,退出即可。
如果(v1==v2)
返回;
//如果程序在这里执行,有些功能还是要完成的。
int tmp=v2
v2=v1
v1=tmp
//这里不需要显示的返回语句
}9.3.2有返回值的函数只要函数的返回类型不是void,函数中的每个return语句都必须返回值。return语句返回值的类型必须与函数的返回类型相同,或者可以隐式转换函数的返回类型。
#包括iostream
使用命名空间std
int max(int x,int y)
{
if (x y)返回x;
返回y;
}
int main()
{
int x,y;
CIN x y;
cout max(x,y)endl;
返回0;
}9.4函数在函数内递归,也可以调用函数本身。
#包括iostream
使用命名空间std
int事实(int n)
{
if (n=1)返回1;
返回n *事实(n-1);
}
int main()
{
int n;
CIN n;
cout fact(n)endl;
返回0;
}
来自的。如需转载,请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。