函数与数组

函数原型:int sum_arr(int arr[],int n);

(数组名可以认为是第一个元素的地址)
数组名就是地址,这里的arr可以成为数组首地址也可以当做指针
等价于:

int sum_arr(int * arr,int n);

在C++中当且仅当用于函数头或函数原型的时候,int * arr 和 int arr[]的含义是一样的

数据安全

可以修改数组内容

void fModify(int arr[],int n)

不可以修改数组内容

void noChange(const int arr[] ,int n);

数组区间

①通过传递两个指针完成:函数原型:

int sumarr(const int  * begin,const int * end);

1)定义数组:

int cookies[size] = {1,2,3,4,5,6,7,8,9}

2)使用:

int sum = sumarr(cookies,cookies+size);

指针与const

const让指针指向一个常量对象,防止使用指针来修改指针指向地址的字面值

函数与二维数组

int sum(int (*arr)[4],int size); <======> int sum(int arr[][4],int size);
第一个参数都表明,四个指向int的指针组成的数组,列数是给定的,行数由size指定。
调用元素的方式:

arr[r][c] = *(*(arr+r)+c)

函数与结构体

结构体本身作为参数

注意形参的定义以及返回值

#include <iostream>using namespace std;struct polar{double distance;double angle;};struct rect{double x;double y;};polar rect_to_polar(rect xyposition);int main() {rect rplace;polar pplace;rplace.x = 4.5;rplace.y = 9.8;pplace = rect_to_polar(rplace);cout << pplace.angle << endl;cout << pplace.distance << endl;} polar rect_to_polar(rect xyposition){polar answer;answer.distance = sqrt(xyposition.x * xyposition.x + xyposition.y * xyposition.y);answer.angle = atan2(xyposition.y, xyposition.x);return answer;}

结构体指针作为参数

#include <iostream>using namespace std;struct polar{double distance;double angle;};struct rect{double x;double y;};void show(const polar* pda);  int main() {polar pplace;pplace.angle = 1.2;pplace.distance = 58.2;show(&pplace);} void show(const polar* pda){cout << pda->angle << endl;cout << pda->distance << endl;}

函数作为参数(函数指针)

函数地址

函数名本身就是一个地址,引用的时候,单纯的函数名就是一个函数的地址,函数名+()表示引用函数的返回值

函数指针的声明

①必须指定指针指向的函数类型
②举例:double pam(int a); //函数原型
—> double (*pf)(int a) //定义指针
----> pf = pam 使用(*pf替换函数名)
(3)函数指针作为传参
Use是另外的一个函数,使用这个函数需要传两个值,第一个整形数据,另一个是一个地址,这个地址是函数的地址
①Use(int a,double (*pf)(int b)) ----> Use(3,pam)

#include <iostream>using namespace std;int sum(int a);int use(int a, int(*pf)(int));int main() {int sumend;int (*pf)(int); //定义一个int型指针pf = sum;       //将sum函数的首地址赋给pf指针sumend = use(1, pf);   //将pf指针作为函数传入use函数cout << sumend << endl;} int sum(int a){return a+1;}int use(int a, int(*pf)(int)){int b = pf(a);  //在use函数中可以直接使用pf,此时的pf指针相当于一个函数名return b+1;}

引用变量

引用的本质

给变量起别名,可以实现跟原名一样的操作,包括改变变量的字面值。
本质:在C++内部实现的是一个指针常量

语法

①Typename & 别名 = 变量名

使用注意

  1. 声明的时候必须初始化
  2. 初始化之后不可以改变

引用做函数的参数

①让形参可以修饰实参,等价于地址做参数
②eg:

void swap(int & a,int & b){Int temp = a;a = b;b = temp; //能够实现交换}

引用做函数返回值

不要返回局部变量的引用 即放在栈区的变量
②函数的调用可以作为左值使用

#include <iostream>using namespace std;int& test();int main() {int& ref = test();ref = 100;    //引用可以操作字面值test() = 1000; //函数返回值可以作为左值} int& test(){static int a = 10;return a;}

函数默认值

函数默认值
(1)用户输入的参数优先级高于默认参数
(2)某个形参有默认值,则后面的每一个形参都要有默认值,否则会报错
(3)函数声明和函数实现两个地方只能有一个地方有默认值,不能同时设置默认值,一样的也不行

©著作权归作者所有:来自51CTO博客作者Oo_。oO的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. C++基础学习---->指针基础笔记
  2. 模拟实现字符串函数及内存函数
  3. #PHP函数的返回值,参数,匿名函数
  4. 无服务器(Serverless)本质上就是虚拟主机(VirtualHost)的一次升
  5. 总结函数的返回值,参数 2. 实例演绎你对课上回调函数,匿名函数的
  6. PHP:字符串系统函数,ASCII字符集转换,url解析函数,字符串散列处
  7. Django 使用正则匹配URL 并将匹配成功的值传递给视图函数
  8. 2.3 激励函数
  9. 1.算法课程主要内容及有关概念: 复杂度的界定, 计算复杂性理论,

随机推荐

  1. Linux常用命令汇总-速查
  2. Linux 3.4.39内核编译配置选项介绍
  3. linux shell脚本编程笔记(四): 获取字符串长
  4. linux apache安装https证书
  5. 有什么办法可以在Windows上不用使用太繁
  6. 线程同步-生产者消费者问题
  7. linux下touch命令也可以一次创建多个文件
  8. linux如何处理多连接请求?
  9. Linux下安装配置MongoDB数据库图解
  10. Linux驱动学习1.hello world;