11.指针@[TOC]
 (1)指针的基本概念
 指针的作用:可以通过指针间接访问内存。
 【注】内存编号是从0开始记录的,一般用十六进制数字表示。
 【注】可以利用指针变量保存地址。(指针就是一个地址)
 (2)指针变量的定义和使用
 语法:数据类型 * 指针变量名;
 
(3)指针所占内存空间
 指针在32位操作系统下:占用4个字节空间。(不管是什么数据类型)
 指针在64位操作系统下:占用8个字节空间。(不管是什么数据类型)
 【注】 
上图中x64是64位操作系统;x86是32位操作系统
 (4)空指针和野指针
 ①空指针
 指针变量指向内存中编号为0的空间。
 用途:初始化指针变量
 【注】空指针指向的内存是不可以访问的。0~255之间的内存编号是系统占用的,因此不可以访问
 ②野指针
 指针变量指向非法的内存空间。
 【注】在程序中,尽量避免出现野指针
 【总结】空指针和野指针都不是我们申请的空间,因此不要访问。
 (5)const修饰指针
 有三种情况:
 ① const修饰指针–常量指针 (const int * p的特点:指针的指向可以修改,但是指针指向的值不可以改)
 ② const修饰常量—指针常量 (int * const p的特点:指针的指向不可以改,但是指针指向的值可以改)
 ③ const既修饰指针,又修饰常量(const int * const p的特点:指针的指向和指针指向的值都不可以改)
 【技巧】看const右侧跟着的是指针(int*)还是常量(p),是指针就是常量指针,是常量就是指针常量(或者这样记:*就是指针,const就是常量,按照前后顺序读);const后面跟着什么,什么不能改(跟着int,则指向的值不能改;跟着p,则指针的指向不能改)。
 (6)指针和数组
 利用指针访问数组中元素
 
【注】 
(7)指针和函数
 利用指针作函数参数,可以修改实参的值。
 ①值传递
 
 
②地址传递
 
 
 
【注】如果是地址传递,可以修改实参。

 
【注】如果不想修改实参,就用值传递;如果想修改实参,就用地址传递。
 【注】冒泡排序函数:
 
【注】int len是为了获取数组的长度。

 
 
12.结构体@[TOC]
 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。
 (1)结构体的定义和使用
 语法:struct 结构体名{ 结构体成员列表 };
 通过结构体创建变量的方式有三种:
 ① struct 结构体名 变量名
 ② struct 结构体名 变量名={ 成员1值,成员2值…}
 ③ 定义结构体时顺便创建变量
 

 
 
 
【注】常用的是第一种和第二种。
 【注】在创建s1时,struct关键字可以省略: 
【注】① 定义结构体的关键字时struct,不可省略。
 ② 创建结构体变量时,关键字struct可以省略。
 ③结构体变量利用操作符 “ “ 访问成员。
 (2)结构体数组
 将自定义的结构体放入到数组中方便维护。
 语法:struct 结构体名 数组名{ 元素个数 } = { { },{ },…{ } }
 
 
(3)结构体指针
 通过指针访问结构体中的成员
 利用操作符 -> 可以通过结构体指针访问结构体属性。
 
(4)结构体嵌套结构体
 结构体中的成员可以是另一个结构体。
 
 
 
 
(5)结构体做函数参数
 将结构体作为参数向函数中传递
 传递方式有两种:值传递和地址传递
 
 
 【注】值传递不可以改变主函数中的值:
 
 
地址传递可以改变主函数中的值:
 
 
【注】如果不想修改主函数中的数据,用值传递,反之用地址传递。
 (6)结构体中const使用场景
 用const来防止误操作
 【注】将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来。(即采用地址传递)
 
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号