第六章 函数(重要知识点)
1 函数定义的语法形式
数据类型 函数名 (形式参数表)
{
函数体 //执行语句
}
关于函数的定义有如下说明。
*函数的数据类型是函数的返回值类型(若数据类型为void,则无返回值)。
函数名是标识符,一个程序中除了主函数名必须为main外,其余函数的名字按照标识符的取名规则可以任意选取。
*形式参数(简称形参)表可以是空的(即无参函数),也可以有多个形参,形参间用逗号隔开。形谷必须有类型说明,形参可以是变量名、数组名或指针名,它的作用是实现主调的数与被调函数之间的关系。
*函数不允许嵌套定义。在一个函数内定义另一个函数是非法的,但是允许嵌套使用。
2函数的调用和返回值
调用:
*函数的调用完成两项工作:一是用实参初始化函数对应的形参,二是将控制权转移给被调用函数。此时,主调函数的执行被暂时中断,被调函数开始执行。
*函数调用可以作为一条语句,这时函数可以没有返回值。函数调用也可以出现在表达式中,这时就必须有一个明确的返回值。
返回值:
*在组成函数体的各类语句中,值得注意的是返回语句return。它的一般形式是:
return(表达式);
其功能是把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回。若为return,此时则没有返回值,而只是将流程转向主调函数。
3 指针变量
指针变量:其内容为地址(储存位置)的变量,简称指针。它所指向的地址上存放的变量称作目标变量。
指针变量的定义的一般形式为:
int(目标变量类型) 指针说明符+变量名(int *p)
*指针变量赋值:
int *p=&i(将在i的地址上的值传给p的地址上)
*p=3(将3赋值给p地址上的目标变量)----取内容运算
ps:绝对不能对未赋值的指针变量作”取内容“运算。
*指针变量做函数参数:
函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。
*指针变量作为函数参数与变量本身作函数参数不同,变量作函数参数传递的是具体值,而指针做函数参数传递的是内存的地址。
(用指针变量做函数参数,在被调用函数的执行过程中,应使指针变量所指向的参数值发生变化,这样,函数在调用结束后,其变化之才能保留会主调函数。)
*c++中函数调用时的三种参数传递方式
·在c++中。参数的传递方式是“虚实结合”
----按值传递
(被调用函数本身不对实参进行操作!即使形参的值在函数中发生了变化,实参的值也完全不会受到影响,仍为调用前的值。)
----地址传递
·如果在函数定义时将实参说明成指针,调用函数时就需要指定地址形式的实参。这时的参数传递方式就是按地址传递方式。
·按地址传递与按值传递的不同在于,形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中任何改变都会影响到实参。
例如转换a,b的值
#include<iostream>
using namespace std:
void swap(int *,int *);
int main()
{
int a=3,b=4;
swap(a,b);
cout<<a<<b;
system(“pause”);
return 0;
}
void swap(int *x,int*y)
{
int t=*x;
*x=*y;
*y=t;
}
----引用传递
此方式既可以使得对应形参的任何操作都能改变相应的数据,又使得函数调用显得方便。此方式是在函数定义时在形参前面加上引用运算符“&”。
例如转换a,b的值:
#include<iostream>
using namespace std:
void swap(int &,int &);
int main()
{
int a=3,b=4;
swap(a,b);
cout<<a<<b;
system(“pause”);
return 0;
}
void swap(int &x,int&y)
{int t=x;
x=y;
y=t
}
数组与指针
*c++规定:数组名就是数组的起始地址;又规定:数组的指针就是数组的起始地址。数组元素的指针就是数组元素的地址。
如:int a[10],*p;
p=&a[0](p的指针指向a[0]的地址);
p=a;(p的指针指向a[0]的地址);
(p是变量,a是常量)。
int *p=a和int *p=&a[0]均为赋初值。
*(p+1)=2即为a[1]=2;
*(a+1)与a[1]等同;
*(+a=2)错误,因为a为常量,不可赋值。
例如输出数组各个值的乘积:
int main()
{
int x[]={1,2,3};
int s,i,*p;
s=1;p=x;
for(i=0;i<=3;i++)
s*=*(p+i);
cout<<s<<endl;
}
全局变量:
定义在函数外部没有被花括号括起来的变量称为全局变量;全局变量的作用域是从变量定义的位置开始到文件结束,可以在文件中位于全局变量定义后面的任何函数中使用。
ps:全局变量在定义时若没有赋初值,其默认值为零。
局部变量:
局部变量的作用域是该变量的函数内部。
一个局部变量和一个全局变量是可以重名的,在相同的作用域中局部变量有效时全局变量无效。
局部变量的默认值是随机的。
学习心得:开学知识较上学期更难一些,开始有些跟不上,需要自学的地方更多了,练习题不懂的地方也更多了,感觉需要练习更多的关于学过知识的题目,具体问题具体分析。