十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
目录
创新互联服务项目包括淄川网站建设、淄川网站制作、淄川网页制作以及淄川网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,淄川网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到淄川省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!一、函数
1、一些基本概念
2、函数的声明
3、函数的分文件编写
4、函数可设置默认参数
5、函数的占位参数
6、函数的重载
二、指针
1、基本概念:
2、指针的定义和赋值
3、指针占用的内存空间
4、const修饰指针
5、指针与数组的关系
6、指针和普通变量作为函数参数的区别
7、空指针
8、野指针
三、引用(一种不能修改指向的指针)
1、基本概念:
2、应用的定义和赋值
3、引用作为函数此参数
4、引用作为函数的返回值
5、const修饰引用
四、结构体
1、基本概念:
2、结构体的定义和赋值:
3、在结构体中嵌套结构体
4、结构体作为函数的参数
5、const修饰结构体
前言:学习资料参考自《C++ Primer Plus(第6版)中文版》和B站视频《C++教程从0到1入门编程》黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili
一、函数 1、一些基本概念返回类型 函数名(参数列表)
{
主体语句
return 返回的语句
}
//例子:函数的定义
int add(int num1,int num2)
{
int sum=sum1+sum2;
return sum;
}
格式:函数名(参数)
//例子:函数的调用
int a=1,b=2;
int c=add(a,b);//调用已经定义过的函数
形参:形式上的参数,函数定义的参数,非真实使用的数据。
实参:实际参数,函数调用时,实参的值会传递到形参中。
//函数定义
int add(int num1,int num2)//此处的num1,num2称为形参
{
int sum=sum1+sum2;
return sum;
}
//函数调用
int a=1,b=2;
int c=add(a,b);//此处的a,b称为实参
参数有无和返回有无
根据参数、返回有无分为4种形式:无参无返,无参有返,有参有返,有参无返
2、函数的声明//声明
int max(int a,int b);
//调用
int aa=1,bb=2;
max(aa,bb)
//定义
int min(int a,int b)
{
return a>b?a:b;
}
3、函数的分文件编写分文件编写的意义:将函数封装到头文件,就可在其他文件调用该函数,增加函数的可复用性。
步骤:
//例子:函数的分文件写法
//先新建以下.h头文件,如文件命名为sawp.h
#includeusing namespace std;
void swap(int a,int b)
{
int temp=a;
a=b;
a=temp;
cout<<"a="<
using namespace std;
#include"swap.h"//声明头文件
int main
{
int a=1,b=2;
swap(a,b);//调用头文件中的函数
system("pause");
return 0;
}
4、函数可设置默认参数用法:
//函数调用的例子
void swap(int a,int b=111,int c=999);//声明,b和c设置了默认参数
//函数调用
int main()
{
swap(10,20);//参数c使用了默认参数
return 0;
}
//函数定义
//void swap(int a,int b,int c)//前面声明时已有设置默认参数,故此处定义时不允许设置默认参数
{
cout<
5、函数的占位参数概述:占位参数,只占用位置,不参与操作。也可设置默认参数
//使用占位参数例子
void F(int)//无默认参数的占位参数
{
cout<<1<
6、函数的重载概述:相同的函数名可定义新的内容,提高函数的复用性
重载条件:
//函数重载的例子
void F(int &a)
{
}
void F(const int &a)//重载
{
}
//调用以上函数
void main1()
{
int a=10;
F(0);//调用F(const int &a)
F(a);//调用F(int &a)
}
//
void A(int a)
{
}
void A(int a,int b=10)//含有默认参数的重载
{
}
void main2()
{
A(10);//此处有二义性,编译器会报错。应避免含有默认参数的重载
}
二、指针
1、基本概念:指针是一种变量类型,用来存放地址(内存编号从0开始记录,一般用16位进制数表示),可以通过指针间接访问内存。
2、指针的定义和赋值int *p;//定义了一个指针
int a=10;//定义一个变量
p=&a;//对指针赋变量a的地址
*p=1000;//改变了a的内容
cout<<*p<
3、指针占用的内存空间//查看指针内存大小
int a=10;
int *p=&a;//定义一个指针
cout<
4、const修饰指针在定义时,const修饰指针的3种情况:
//const修饰指针的3种情况
int a=1,b=2;//定义两个变量
//const修饰指针
const int *p1=&a;//常量指针(指向的内容不可修改,指向的地址可修改)
p1=&b;//指向地址可改,若*p1=20;则会报错,因为指向的内容不可修改
//const修饰常量
int const *p2=&a;//指针常量(指向的内容可修改,指向的地址不可修改)
*p2=20;//指向的内容可改,若p2=&b;则会报错,因为指向地址不可修改
//const修饰常量
const int const *p3=&a;//指向的内容可和地址都不可修改
//p3=&b;和*p3=20;均会报错
5、指针与数组的关系数组名就是数组的首地址,所以数组名相当于指针。
int arr[10]={0,1,2,3,4,5,6,7,8,9}//定义一个数组
int *p=arr;//指向数组的首地址
p=arr[0];//还是指向数组的首地址
p++;//指向下一个,即arr[1]
6、指针和普通变量作为函数参数的区别//针和普通变量作为函数参数的区别
void swap01(int a,int b)//普通变量传参
{
int temp =a;
a=b;
b=temp;
}
void swap02(int *p1,int *p2)//指针传参
{
int temp =*p1;
*p1=*p2;
*p2=temp;
}
//应用
int main()
{
int a=1,b=2;
swap01(a,b);//只复制了数值传进去,此时a,b并没有被修改
swap02(&a,&b);//传入地址,此时a,b已被修改
}
7、空指针//用空指针初始化指针
int *p=NULL;
8、野指针野指针:指向非法的内存空间。要避免使用,不能访问。
//野指针的例子
int *p=(int *)0X1100//没申请的内存空间,p是个野指针
cout<<*p<
三、引用(一种不能修改指向的指针)
1、基本概念://定义和使用引用
int a=1;//定义一个变量
int &b=a;//定义一个引用,且初始化
b=10;//间接对a进行操作,此时a=10
3、引用作为函数此参数优点:简化指针,使代码简洁明了。效果的等同指针作为函数参数。
//引用作为函数参数的例子
void swap(int &a,int &b)//引用作为参数,效果跟指针一样,但代码简洁
{
int temp=a;
a=b;
b=temp;
}
//应用
void main()
{
int a=1,b=2;
swap(a,b);//直接填入即可,不需先将变量转化为地址或指针填入
}
4、引用作为函数的返回值//引用作为函数的返回值
int &test()
{
static int a=10;//定义一个静态变量,属于全局变量,所以不会被释放
return a;//作为a的引用返回
}
//调用
void main()
{
int &ref=test();//定义一个引用,指向a
test()=100;//函数的调用可以作为左值,因为函数返回是引用,相当于一个变量。
//同时静态变量a也被修改了
cout<
5、const修饰引用当引用作为函数的形参,用const修饰,使形参只读,防止形参被修改。等效于(const 数据类型 * const 指针变量名)。
//const修饰传参中的引用
void showValue(const int &val)
{
cout<
四、结构体
1、基本概念:结构体是用户自定义的数据类型,可储存不同数据类型的变量。
2、结构体的定义和赋值://创建和使用结构体
struct student//定义一个名为student的结构体类型
{
int age;
int height;
string name;
}
student Amy={27,158,"艾米"}//创建具体的student类型结构体
coutage=80;//修改成员
3、在结构体中嵌套结构体在结构体中,可以使用其他结构体作为成员
struct teacher//定义1个结构体
{
int age;
string name;
}
struct student//定义1个结构体
{
int age;
int height;
string name;
}
struct school//使用以上结构体
{
struct teacher t1;
struct teacher t2;
struct student s1;
struct student s2;
struct student s3;
}
//创建具体的结构体
school MIT=
{
{38,"IP MAN"},
{40,"Jacky Chan"},
{12,160,"A"},
{13,158,"B"},
{14,162,"C"},
}
//访问
cout<
4、结构体作为函数的参数struct student//定义1个结构体
{
}
//结构体出现在函数中
void printStudent1(struct student s);//声明1个函数,值传递
void printStudent2(struct student *s);//声明1个函数,地址传递
struct student s1;
//调用
printStudent1(s1);//复制实参的数据到函数
printStudent1(&s1);//在函数里直接操作实参
5、const修饰结构体//结构体使用const,防止被修改
struct student//定义1个结构体
{
int age;
int height;
string name;
}
void printStudent(const student *S)//定义一个函数访问结构体,使用const防止结构体被修改
{
cout<name<
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧