C++自学笔记小记(四)(五)(黑马)

面向过程编程自学笔记整理

四、函数

1、函数

#include"iostream"
using namespace std;

//函数的作用:
//将一段经常使用的代码封装起来,减少重复代码
/***********************1.函数定义五个步骤***********************/
/*
1.返回值类型
2.函数名
3.参数列表
4.函数体语句
5.return表达式

返回值类型 函数名(参数列表)
{
函数体语句;
return表达式;
}
*/
/***************2.写一个加法函数传入两个整形数据,相加返回结果*************************/
/*
1.返回值类型   int
2.函数名       add
3.参数列表     (int num1,int num2)
4.函数体语句   int sum=num1+num2;
5.return表达式 return sum;
*/
//int add(int num1, int num2)//加法函数的定义
//{
//	//函数定义时,num1和num2无真实的数据,为形式参数,简称形参
//	int sum = num1 + num2;
//	return sum;
//}

/******************3.函数的调用*************************************************/
//函数名(参数)
//int main()
//{
//	//mian函数中调用add函数
//	int a1 = 10;
//	int b1 = 20;
//	//函数调用语法:函数名称(参数)
//	//a1和b1称为实际参数,简称实参
//	int c1=add(a1, b1);
//	cout << "c1=" << c1 << endl;
//	int a2 = 38;
//	int b2 = 34;
//	int c2 = add(a2, b2);
//	cout << "c2=" << c2 << endl;
//	system("pause");
//	return 0;
//}


/******************4.值的传递*************************************************/
//定义函数:实现两个数字进行交换的函数
//如果函数不需要返回值,声明的时候可以写void
//void swap(int num1, int num2)
//{
//	cout << "交换前" << endl;
//	cout << "num1=" << num1 << endl;
//	cout << "num2=" << num2 << endl;
//
//	int temp = num1;
//	num1 = num2;
//	num2 = temp;
//
//	cout << "交换后" << endl;
//	cout << "num1=" << num1 << endl;
//	cout << "num2=" << num2 << endl;
//	//return;不需要返回值的时候,可以不写return
//}
//
//int main()
//{
//	int a = 10;
//	int b = 88;
//	cout << "a=" << a << endl;
//	cout << "b=" << b << endl;
//	swap(a, b);
注意事项:做值传递时,函数的形参发生变化,并不会影响实参
//	cout << "a=" << a << endl;
//	cout << "b=" << b << endl;
//
//	system("pause");
//	return 0;
//}

/*****************5.函数的常见样式*************************************************/
1.无参无返
//void test01()
//{
//	cout << "this is test 01" << endl;
//}
2.有参无返
//void test02(int a)
//{
//	cout << "this is test 02,a=" <<a<< endl;
//}
3.无参有返
//int test03()
//{
//	cout << "this is test 03" << endl;
//	return 100;
//}
//
4.有参有返
//int test04(int a)
//{
//	cout << "this is test 04,"<<endl;
//	return a;
//}
//int main()
//{
//    //无参无返函数调用
//	test01();
//	//有参无返函数调用
//	test02(10);
//	//无参有返函数调用
//	int num1=test03();
//	cout << "num1="<<num1 << endl;
//	//有参有返函数调用
//	int num2 = test04(200);
//	cout << "num2=" << num2 << endl;
//	system("pause");
//	return 0;
//}
/*****************6.函数的声明*************************************************/
//函数声明的作用:告诉编译器函数的名称以及如何让调用函数,函数的实际主体可以单独定义
//注意事项:函数的声明可以多次,但函数的定义只能有一次
//比较函数:实现两个整形数字进行对比,返回较大的值


//提前告诉编译器函数的存在,可以利用函数的声明
int max(int a, int b);//函数声明
//函数声明可以写多次,但是定义只能写一次

int max(int a, int b)//函数定义
{
	return a > b ? a : b;//三目运算符
}

int main()
{
	int a = 20;
	int b = 39;
	cout << max(a, b) << endl;
	system("pause");
	return 0;
}


2、函数分文件编写

函数分文件编写.cpp

#include"iostream"
using namespace std;
#include"swap.h"
//函数的分文件编写
//作用:让代码结构清晰
//函数分文件编写4步骤
/*
1.创建后缀名为.h的头文件
2.创建后缀名为.cpp的源文件
3.在头文件中写函数的声明
4.在源文件中写函数的定义
*/

//实现两个数字进行交换的函数
函数的声明
//void swap(int a, int b);
//函数的定义
//void swap(int a, int b)
//{
//	int temp = a;
//	a = b;
//	b = temp;
//
//	cout << "a=" << a << endl;
//	cout << "b=" << b << endl;
//
//}
int main()
{
	int a = 28;
	int b = 66;
	swap(28, 66);

	system("pause");
	return 0;
}

swap.cpp

#include"swap.h"

//实现两个数字进行交换的函数
//函数的定义
void swap(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;

	cout << "a=" << a << endl;
	cout << "b=" << b << endl;

}

swap.h

#include"iostream"
using namespace std;

//实现两个数字进行交换的函数
void swap(int a, int b);//函数的声明

五、指针

#include"iostream"
using namespace std;

//int main()
//{
/****************1.指针的基本概念和定义*********************************/
	//指针:用来保存一个地址(指针就是地址)
	1.定义指针
	//int a = 10;
	指针定义语法:数据类型*指针变量名;
	//int * p;
	让指针记录变量a的地址
	//p = &a;//建立二者的关系
	//cout << "a的地址为:" << &a << endl;
	//cout << "指针p为:" << p << endl;

	2.使用指针
	可以通过解引用的方式找到指针指向的内存
 //   //指针前加一个*叫解引用,找到指针指向的内存中的数据
	//*p = 1000;//解引用,可以通过指针读取和修改对应内存数据
	//cout << "a=" << a << endl;
	//cout << "*p=" << *p << endl;


/****************2.指针所占内存空间*********************************/
//指针也是数据类型,指针的所占的内存空间多大?
	指针所占内存空间
	//int a = 10;
	int* p;
	p = &a;
	//int* p = &a;

	在x86(32位)操作系统下,指针占4个字节空间大小,不管什么数据类型
	在x64(64位)操作系统下,指针占8个字节空间大小,不管什么数据类型
	//cout << "sizeof (int*)=" << sizeof(int*) << endl;
	//cout << "sizeof (p)=" << sizeof(p) << endl;//int*和p等价
	//cout << "sizeof (float*)=" << sizeof(float*) << endl;
	//cout << "sizeof (double*)=" << sizeof(double*) << endl;
	//cout << "sizeof (char*)=" << sizeof(char*) << endl;
	//cout << "sizeof (long*)=" << sizeof(long*) << endl;
	//cout << "sizeof (long long*)=" << sizeof(long long*) << endl;


/****************3.空指针*********************************/
    //空指针:指针变量指向内存中编号为0的空间
    //用途:初始化指针变量
	//int* p = NULL;
    注意事项:空指针指向的内存空间是不可访问的
	0~255之间的内存编号是系统占用的,因此不可以访问
	//*p = 100;//程序直接报错,奔溃


/****************4.野指针*********************************/
    //在程序中,必须避免出现野指针
	//int* p =(int *)0x11100;//随便指向一个未知的内存空间的指针为野指针
	//cout << *p << endl;//会报错,显示没有访问权限
//结论:空指针和野指针都不是我们所申请的空间,所以不要访问


/****************5.const修饰指针*********************************/
//const修饰指针三种情况(前向后值)
//const翻译为常量
//*为指针

//1.const修饰指针——常量指针
//指针指向可以改,指针指向的值不可以改
	//int a = 10;
	//int b = 20;
	//const int* p = &a;(常量和指针=常量指针)
	//*p = 30;//报错,显示指针指向值不可修改
	//p = &b;//显示不会报错
	
//2.const修饰常量——指针常量
//指针指向不可以改,指针指向的值可以改
	//int a = 10;
	//int b = 20;
	//int* const p = &a;(指针和常量=指针常量)
	//*p = 40;//显示不会报错
	//p = &b;//报错,显示指针的指向不可修改

//3.const既修饰指针,又修饰常量
//指针指向和指向的值都不可以修改
	//int a = 10;
	//int b = 20;
	//const int* const p = &a;
	//*p = 20;//报错,显示指针指向值不可修改
	//p = &b;//报错,显示指针的指向不可修改
 

/****************6.数组和指针*********************************/
//利用指针访问数组中的元素
//	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//	cout << "数组中的第一个元素为:" << arr[0] << endl;
//
//	int* p = arr;//arr就是数组的首地址
//	cout << "利用指针访问数组第一个元素:" << *p << endl;
//
//	p++;//让指针向后偏移8个字节(x64)/4个字节(x86)
//	cout << "利用指针访问第二个元素:" << *p<<endl;
//	
//	cout << "利用指针遍历数组中的元素" <<endl;
//	int* p2 = arr;
//	for (int i = 0; i < 10; i++)
//	{
//		//cout << arr[i] << endl;
//		cout << *p2 << endl;
//		p2++;
//	}	
//	system("pause");
//	return 0;
//}


/****************7.指针和函数*********************************/
//利用指针做函数的参数,修改实参的值
//实现两个数字进行交换
//void swap01(int a, int b)//传入的为两个参数
//{
//	int temp = a;
//	a = b;
//	b = temp;
//	cout << "swap01 a=" << a << endl;
//	cout << "swap01 b=" << b << endl;
//}
//
//void swap02(int *p1,int *p2)//传入的为两个指针
//{
//	int temp = *p1;
//	*p1 = *p2;
//	*p2 = temp;
//}
//
//int main()
//{
//    //指针和函数	
//	int a = 10;
//	int b = 20;
//	//1.值传递
//	// 如果是值传递,只能修改形参,不能修改实参
//	//swap01(a, b);
//	//2.地址传递
//	//如果是地址传递,可以修改实参
//	swap02(&a, &b);
//	cout << "a=" << a << endl;
//	cout << "b=" << b << endl;
//	system("pause");
//	return 0;
//}


/****************8.指针,数组,函数典型案例*********************************/
//案例:封装一个函数,利用冒泡排序,对整形数组实现升序排列
//冒泡排序函数:参数1—数组首地址,参数2—数组长度
void bubblesort(int *arr,int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			//如果j>j+1,交换这两个数
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}

		}
	}
}
//打印数组的函数
void printarr(int* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
}


int main()
{
//1.创建一个数组
 int arr[10]={4,3,6,9,1,2,10,8,7,5};
 //数组长度
 int len = sizeof(arr) / sizeof(arr[0]);

//2.创建一个函数,实现冒泡排序
 bubblesort(arr,len);
//打印排列后的数组
 printarr(arr, len);
 system("pause");
 return 0;

}

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值