C/C++教程

C++基础学习----->函数与各种数据结构

本文主要是介绍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 & 别名 = 变量名

使用注意

  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)函数声明和函数实现两个地方只能有一个地方有默认值,不能同时设置默认值,一样的也不行

这篇关于C++基础学习----->函数与各种数据结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!