【C++-----函数,指针,结构体】

一 、函数:

1.1函数调用:

(1)值传递(函数对形参值的修改不会实际改变实参 )

(2)址传递

1.2函数常见样式:

1 无参无返

2 有参无反

3 无参有反

4 有参有反

1.3函数的声明:

作用:定义使用前告诉编译器

两种声明方式:

(1 )其他函数写在主函数前面:不用进行声明,相当于已经声明

(2) 其他函数写在主函数后面:需要在主函数前进行声明

1.4函数分文件编写 :

作用:使代码结构更清晰

分文件步骤:

步骤1:创建头文件和源文件

(1)创建后缀名.h的头文件(在头文件文件夹中创建)

(2)创建源文件

步骤二:
头文件中写各种函数的声明,以及主函数需要用到的头文件

步骤三:
源文件中写函数的定义,并将头文件中包含进来

二 、指针:

2.1 空指针:NULL

指向的内存编号为0

作用:初始化指针变量

注意:空指针指向的内存不允许访问,原因是0-255之间的内存编号已经被内存占用

2.2野指针:

指针指向的内存位置非法(没有申请的地址),程序中要避免出现野指针

2.3 const修饰指针:

(1) const修饰指针:常量指针

(表示指向的内存空间中的值不能够被修改)

int a=10;

const int *p=&a;//const后面是星号p,限定的值

定义的指针变量前面加const:

特点是指针指向的值不可以修改,指针的指向可以修改

(2 )const修饰常量:指针常量

int a=10;

int *const p=&a;//const后面是指针变量p,不能修改指针的指向

特点:指针的指向不可以修改,指针指向的值可以修改

(3) const既修饰指针,又修饰常量

const int * const p=&a;

特点:指针的指向和指针指向的值都不可以修改。

记忆方法:const翻译为常量,看位置记忆

2.4 指针和数组的关联:利用指针访问数组中的元素

数组名是数组的首地址

和C语言中一样:指针变量++就是跳过指针类型对应数据所占的字节数,访问数组中的下一个元素

2.5 指针和函数:址传递

值传递是赋值进行操作,与实参脱离,不能对实参进行修改

指针作为函数参数,可以对实参进行更改

三 、结构体:

是一种自定义的数据类型,是一些基本数据类型的集合

通过这种数据结构也能创建变量

3.1 结构体的定义和使用:

struct 结构体名

{

成员变量列表;

};

结构体的创建一般在主函数外边

3.2 创建结构体变量的三种方式:

结构体类型变量的数据类型组成:struct 结构体名

(1)struct 结构体名 变量名;//只创建,不进行初始化

(2)struct 结构体名 变量名={ };//创建并对成员成员变量进行初始化

(3)定义结构体的同时进行变量的创建

结构体变量成员变量的操作用.操作符

3.3 结构体数组:

作用:将结构体变量存放到数组中,方便对数据进行维护

创建语法:和普通数组创建方式类似

struct 结构体名 数组名[ 元素个数]={ { },{ },{ }}

3.4结构体指针:

作用:通过结构体类型的指针访问结构体变量中的成员变量

通过->操作符

3.5 结构体嵌套结构体:

其中一个结构体为另一结构体的成员

struct student
{
	string name;//学上姓名
	int age;//学生年龄
	int score;//考试分数
};
struct Student
{
	int id;//教师编号
	string name;//教师姓名
	struct student s1;//教师的学生s1
};

使用结构体变量中的结构体变量中的变量:需要使用多个.操作符(多层访问)

3.6结构体作为函数参数:

作用:将结构体变量作为参数向函数中传递

传递方式:

(1)值传递

(2)址传递

struct student
{
	string name;//学上姓名
	int age;//学生年龄
	int score;//考试分数
};

//打印学生信息函数
//(1)值传递
void printstudent(struct student stu)
{
	cout << "函数中打印:姓名:" << stu.name << "年龄:" << stu.age << "分数:" << stu.score << endl;
}
//(2)址传递,用结构体类型的指针来结构结构体变量的地址
void printstudent(struct student *pstu)
{
	cout << "main函数中打印:姓名:" << pstu->name << "年龄:" << pstu->age << "分数:" << pstu->score << endl;
}

int main()
{
	//将某一学生作为实参传入,打印学生身上所有信息
	struct student s1;
	s1.name = "张三";
	s1.score = 100;
	s1.age =18;
	//cout << "main函数中打印:姓名:" << s1.name << "年龄:" << s1.age << "分数:" << s1.score << endl;
	printstudent(s1);
	printstudent(&s1);
	system("pause");
	return 0;
}

3.7 结构体中的const:

作用:防止对数据误操作

使用背景:
结构体变量中的数据可能很多,在进行创建结构体变量过多/操作的时候,数据量过于庞大,对内存的需求太大

因此进行函数传址的方式每次只需要4个字节的内存空间:可以减少内存空间,而且不会复制新的副本:

但是为了防止传址可能会对数据误操作造成修改(隐患),就可以相关函数的参数前面加上const(使传来的结构体变为结构体常量)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值