C++基础学习----->函数与各种数据结构
函数与数组
函数原型: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 & 别名 = 变量名
使用注意
- 声明的时候必须初始化
- 初始化之后不可以改变
引用做函数的参数
①让形参可以修饰实参,等价于地址做参数
②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)函数声明和函数实现两个地方只能有一个地方有默认值,不能同时设置默认值,一样的也不行
更多相关文章
- C++基础学习---->指针基础笔记
- 模拟实现字符串函数及内存函数
- #PHP函数的返回值,参数,匿名函数
- 无服务器(Serverless)本质上就是虚拟主机(VirtualHost)的一次升
- 总结函数的返回值,参数 2. 实例演绎你对课上回调函数,匿名函数的
- PHP:字符串系统函数,ASCII字符集转换,url解析函数,字符串散列处
- Django 使用正则匹配URL 并将匹配成功的值传递给视图函数
- 2.3 激励函数
- 1.算法课程主要内容及有关概念: 复杂度的界定, 计算复杂性理论,