C++学习Day4

六、指针

指针的作用:可以通过指针间接访问内存
指针变量定义语法:数据类型 * 变量名
步骤:(1)定义指针 int a= 10; (2)定义指针变量 int * p;(3)让指针记录变量a的地址 p=&a;(4)使用指针 * p = 100;指针前加*代表解引用,找到指针指向的内存中的数据
或者创建指针的简单方法: int a=10; int * p = &a;
空指针:指针变量指向内存中编号为0的空间 作用:初始化指针变量 注意:空指针指向的内存是不可以访问的 用法:int * p = NULL;
野指针:指针变量指向非法的内存空间 eg: int * p = (int *)0x1100;指针变量p指向不存在的0x1100内存地址空间
空指针和野指针都不是我们申请的空间,因此不要访问
const修饰指针:有三种情况
(1)const修饰指针称为常量指针,const int * p = &a; 特点是指针的指向可以修改,但是指针指向的值不可以改
(2)const修饰常量称为指针常量, int * const p =&a; 特点是指针的指向不可以修改,指针指向的值可以改
(3)const既修饰指针又修饰常量,const int * const p =&a; 特点是指针的指向和指针指向的值都不可以改
方法:看const右侧紧跟着的是指针还是常量,是指针就是常量指针,是常量就是指针常量
指针和数组:利用指针访问数组中元素
利用指针遍历数组: int * p = {1,2,3,4}; for(int i=0; i<4;i++){cout<<*p<<endl;p++}
指针和函数:利用指针做函数参数,可以修改实参的值
地址传递:如果是地址传递,可以修饰实参,值传递不会改变实参, eg: swap(&a,&b);

七、结构体

基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型
结构体定义的写法: struct 结构体名 { 结构体成员列表 }; eg:struct student{string name; int age;}
结构体变量的创建方式有三种:(1)struct 结构体名 变量名 eg:struct student stu;(2)struct 结构体名 变量名 = {成员1值,成员2值…}(3)定义结构体时顺便创建变量
结构体变量的使用:利用操作符“.”访问成员,eg:stu.name
注意创建结构体变量时struct关键字可以省略,但是定义结构体时struct关键字不能省略
结构体数组:将自定义的结构体放入到数组中方便维护
结构体数组的写法:struct 结构体名 数组名[元素个数] = {{},{},…{}}
结构体指针:通过指针访问结构体中的成员
利用操作符->可以通过结构体指针访问结构体属性
结构体指针的写法:

struct student s = {"", 18, 100}; //创建结构体变量
struct student * p = &s;          //通过指针指向结构体变量
cout<<姓名:""<<p->name<<endl;     //通过指针访问结构体变量中的数据

结构体嵌套结构体:结构体中的成员可以使另一个结构体
eg: 一个老师的结构体中记录一个学生的结构体
写法:

struct student{ string name;}
struct teacher{ int id; struct student stu}

结构体做函数参数:将结构体作为参数向函数中传递
传递方式有两种:值传递、地址传递
值传递:s.name
地址传递:p->name
如果不想修改主函数中的数据,用值传递,反之用地址传递
结构体中const使用场景:用const来防止误操作
用法:void main(const student *stu),加入const之后,一旦有修改的操作就会报错,可以防止我们的误操作
将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值