(个人笔记 ) C/C++基础知识(三)


紧接(个人笔记)C/C++基础知识(二)

结构体

基本用法

用户自定义的数据类型,允许用户储存不同的数据类型
定义
struct 结构体名{结构体成员列表};
举例

#include <iostream>
#include <string>
using namespace std;
 //定义结构体
struct student
{
	string name;
	int age;
};
int main()
{
	//使用
	student stu;
	stu.name = "张三";
	stu.age = 20;
	cout << "姓名: " << stu.name << "  年龄:" << stu.age << endl;

	system("pause");
	return 0;
}

结构体数组

定义方式没变,但是创建变量时改变。
举例

#include <iostream>
#include <string>
using namespace std;
 //定义结构体
struct student
{
	string name;
	int age;
};
int main()
{
	//使用
	student stu[2];
	stu[0].name = "张三";
	stu[0].age = 20;
	stu[1].name = "李四";
	stu[1].age = 18;
	cout << "姓名: " << stu[0].name << "  年龄:" << stu[0].age << endl;
	cout << "姓名: " << stu[1].name << "  年龄:" << stu[1].age << endl;
	system("pause");
	return 0;
}

结构体指针

定义方式一样,创建有所区别
注意访问成员变量的方式 “->”

#include <iostream>
#include <string>
using namespace std;
 //定义结构体
struct student
{
	string name;
	int age;
};
int main()
{
	//使用
	student stu;
	student* ptr = &stu;
	ptr->name = "小芳";
	ptr->age = 18;
	cout << "姓名: " << ptr->name << "  年龄:" << ptr->age << endl;
	system("pause");
	return 0;
}

结构体嵌套结构体

利用两个“ .”进行访问成员列表即可

内存四区

  • 编译生成的exe可执行文件,未执行该程序前为代码区和全局区
  • 程序运行后,栈区和堆区

代码区

特点

  • 存放函数体的二进制代码,由操作系统进行管理
  • 共享----对于频繁被执行的程序,只需要一份代码即可
  • 可读----不可写,安全性
  • 存放CPU执行的机器指令

全局区

  • 存放全局变量和静态变量以及常量(字符串常量和const修饰的全局变量)
  • 该区域的数据在程序结束后由操作系统释放
  • const修饰的局部变量不在全局区

栈区

注意,不要返回局部变量的地址
特点

  • 局部变量存放在栈区,栈区的数据在函数执行完后自动释放

堆区

主要利用new在堆区开辟内存
语法:
开辟
new创建一个堆区的数据为整型的10,返回一个地址。让栈区的指针指向这个地址。

int* p = new int(10);

释放
释放new开辟的内存,用delete关键字

	delete p;	//变量
	delete[] arr;//数组

引用

作用:给变量取别名
语法:数据类型 & 别名=原名;

注意:

  • 引用必须初始化
  • 一旦初始化,就不可以更改(引用很专一)

应用场景:作为函数的形参,可以修饰实参
引用用作函数参数

#include <iostream>
using namespace std;
//引用作为函数参数
void swap1(int &num1,int &num2)
{
	int temp = num1;
	num1 = num2;
	num2 = temp;
}

int main()
{
	int a =10;
	int b =100;
	cout << "应用作为函数参数,交换前:" << endl;
	cout << "a= " << a << "  b= " << b << endl;
	swap1(a, b);
	cout << "应用作为函数参数,交换后:" << endl;
	cout << "a= " << a << "  b= " << b << endl;

	system("pause"); 
	return 0;
}

在这里插入图片描述
引用用作函数的返回值
1.不要返回局部变量的引用

#include <iostream>
using namespace std;
//返回局部变量的引用
int & add(int num1,int num2)
{
	int sum = num1 + num2;
	return sum;
}

int main()
{
	int &c=add(10,10);
	cout << c << endl;
	cout << c << endl;//错误数据
	system("pause"); 
	return 0;
}

2.引用用作函数的返回值

#include <iostream>
using namespace std;

int & add(int num1,int num2)
{
	//静态变量,在全局区
	static int sum = num1 + num2;
	return sum;
}
int main()
{
	int &c=add(10,10);
	cout << c << endl;
	cout << c << endl;
	add(10, 10) = 1000;
	cout << c << endl;
	cout << c << endl;
	system("pause"); 
	return 0;
}

在这里插入图片描述
3.引用的本质在c++内部的实现是一个指针常量

	int &ref=a;	//本质int *const ref =&a;
	ref=20;		//本质 *ref=20;

4.常量引用

	const int &a=10;

函数提高

函数的形参列表可有默认参数

#include <iostream>
using namespace std;

int sum(int a, int b = 10, int c = 10)
{
	return a + b + c;
}
int main()
{
	int s = sum(10);
	cout << s << endl;

	system("pause"); 
	return 0;
}

在这里插入图片描述
注意事项
1.默认参数从左到右必须全部初始化

(int a,int b,int c=10,int d=10)//从变量c开始后免得变量都必须初始化

2.函数的声明和定义,只能有一个有默认参数

函数的形参列表中可以有占位参数

在调用时必须补全

#include <iostream>
using namespace std;

int sum(int a, int b , int )
{
	return a + b ;
}
int main()
{
	//在调用时补全
	int s = sum(10,20,10000);
	int s1= sum(10, 20, 20000);
	cout << "s= "	<< s  << endl;
	cout << "s1= "  << s1 << endl;
	system("pause"); 
	return 0;
}

在这里插入图片描述
占位参数还可以有默认参数

#include <iostream>
using namespace std;

//占位参数有默认参数
int sum(int a, int b , int = 10 )
{
	return a + b ;
}
int main()
{
	//已有默认参数,不需要三个参数,写了三个也不报错
	int s = sum(10,20);
	int s1= sum(10,20);
	cout << "s= "	<< s  << endl;
	cout << "s1= "  << s1 << endl;
	system("pause"); 
	return 0;
}

在这里插入图片描述

函数重载

  • 函数名可以相同,提高复用性

条件

  • 同一作用域下(全局区)
  • 函数名称一样
  • 形参的顺序,数量不同,参数类型不同

返回值的类型不同不可做为重载条件

注意
1.引用作为重载的条件

#include <iostream>
using namespace std;

//1.函数在全局区
int  add(int& a)
{
	cout << "第一个函数:"<<endl;
	int sum = 0;
	sum *= a;
	return sum;

}
//2.函数名一样
//3.参数类型不同
int  add(const int& a)
{
	cout << "第二个函数:" << endl;
	int sum = 0;
	sum += a;
	return sum;
}
int main()
{
	int a = 20;
	cout << add(10) << endl; //此处调用的是第二个函数
	cout << add(a) << endl;  //此处调用的是第一个函数
	system("pause"); 
	return 0;
}

在这里插入图片描述
2.重载碰到默认参数

	void func(int a,int b=10);
	void func(int a);
	func(10);   //出现二义性,无法重载
	func(10,20);//可以重载

【未完待续…博主持续总结中…】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值