复习结构体与指针+引用_第1页
复习结构体与指针+引用_第2页
复习结构体与指针+引用_第3页
复习结构体与指针+引用_第4页
复习结构体与指针+引用_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C/c+语语言言程程序序设设计计 复习结构体和指针等内容复习结构体和指针等内容C/c+语语言言程程序序设设计计 一、一、 指针指针1 1、变量与地址、变量与地址程序中: int i; float k; 内存中每个字节有一个编号-地址.2000200120022005内存02003ik 编译或函数调用时为其分配内存单元编译或函数调用时为其分配内存单元变量变量是对程序中数据是对程序中数据存储空间的抽象存储空间的抽象C/c+语语言言程程序序设设计计 .2000200420062005整型变量整型变量i10变量i_pointer2001200220032 2、指针与指针变量、指针与指针变量指针:指针:

2、一个变量的地址指针变量:指针变量:专门存放变量地址的变量叫指针变量2000指针指针变量指针变量 变量的变量的内容内容 变量的变量的地址地址指针变量指针变量变量变量变量地址变量地址(指针指针)变量值变量值指指向向地址存入地址存入指针变量指针变量C/c+语语言言程程序序设设计计 3、直接访问与间接访问、直接访问与间接访问 直接访问:直接访问:按变量地址存取变量值 间接访问:间接访问:通过存放变量地址的变量去访问变量例 i=3; -直接访问指针变量指针变量.2000200420062005整型变量整型变量i10变量变量i_pointer20012002200320003例例 *i_pointer=2

3、0; -间接访问间接访问20C/c+语语言言程程序序设设计计 指针变量指针变量.2000200420062005整型变量整型变量i10变量变量i_pointer2001200220032000整型变量整型变量k例例 k=i; -直接访问直接访问 k=*i_pointer; -间接访问间接访问10例例 k=i; k=*i_pointer; C/c+语语言言程程序序设设计计 4、指针变量、指针变量 指针变量指针变量与其与其所指向的变量所指向的变量之间的关系之间的关系指针变量的定义指针变量的定义一般形式:一般形式: 存储类型存储类型 数据类型数据类型 *指针名;指针名;3变量变量i2000i_poi

4、nter*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=33变量变量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=3合法标识符合法标识符指针变量本身的存储类型指针变量本身的存储类型指针的目标变量的数据类型指针的目标变量的数据类型表示定义指针变量表示定义指针变量不是不是*运算符运算符例例 int *p1,*p2; float *q ; static char *name;注意:注意:1、在、在int *p1, *p2定义中,定义中,指针变量名是指针变量名是p1

5、,p2 ,不是不是*p1,*p22、指针变量只能指向定义时所规定类型的变量指针变量只能指向定义时所规定类型的变量3、指针变量定义后,、指针变量定义后,变量值不确定变量值不确定,应用前必须先赋值,应用前必须先赋值C/c+语语言言程程序序设设计计 二、结构体二、结构体. .结构体类型定义结构体类型定义结构体是结构体是一种构造数据类型一种构造数据类型用途:把不同类型的数据组合成一个整体,用途:把不同类型的数据组合成一个整体,是一种自定义数据类型是一种自定义数据类型struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名成员名; .;成员类型可以是基本型或构

6、造型struct是关键字,不能省略合法标识符可省:无名结构体结构体类型可以定义在函数内,也可以结构体类型可以定义在函数内,也可以定义在函数外(作用域问题)定义在函数外(作用域问题)C/c+语语言言程程序序设设计计 例 struct student int num; char name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr2字节2字节20字节1字节4字节30字节.结构体类型定义描述结构结构体类型定义描述结构的组织形式的组织形式,不分配内存不分配内存结构体类结构体类型标识符型标识符C/c+语

7、语言言程程序序设设计计 2.2.结构体类型变量定义结构体类型变量定义1) 先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量一般形式:一般形式: struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .;struct 结构体名结构体名 变量名表列变量名表列;例 struct student short int num; char name20; char sex; short int age; float score; char addr30; ; struct student stu1,stu10,*p; C/c+语

8、语言言程程序序设设计计 2)定义结构体类型的同时定义结构体变量)定义结构体类型的同时定义结构体变量一般形式:一般形式:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .变量名表列变量名表列;例 struct student short int num; char name20; char sex; short int age; float score; char addr30; stu1,stu10,*p; C/c+语语言言程程序序设设计计 3) 直接定义结构体变量直接定义结构体变量一般形式一般形式:struct 类型标识符类型标

9、识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .变量名表列变量名表列;例 struct short int num; char name20; char sex; short int age; float score; char addr30; stu1,stu10,*p; 用用无名结构体无名结构体直接定义直接定义变量变量只能一次只能一次C/c+语语言言程程序序设设计计 3 3 结构体变量的初始化结构体变量的初始化形式一:形式一:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .;struct 结构体名结构体名

10、结构体变量结构体变量=初始数据初始数据;例例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;C/c+语语言言程程序序设设计计 形式二形式二:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .结构体变量结构体变量=初始数据初始数据;例例 struct student int num; char name20; char

11、sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; C/c+语语言言程程序序设设计计 形式三:形式三:struct 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .结构体变量结构体变量=初始数据初始数据;例例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; C/c+语语言言程程序序设设计计 说明:说明:

12、结构体类型与结构体变量概念不同结构体类型与结构体变量概念不同 类型类型:不分配内存;不分配内存; 变量变量:分配内存分配内存 类型类型:不能赋值、存取、运算不能赋值、存取、运算; 变量变量:可以可以 结构体可嵌套结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆结构体成员名与程序中变量名可相同,不会混淆例 struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu;numnamebirthdaymonthdayyear例 struct

13、student int num; char name20; struct date int month; int day; int year; birthday; stu;numnamebirthdaymonthdayyearC/c+语语言言程程序序设设计计 3. 3.结构体变量的引用结构体变量的引用 引用规则:引用规则: 结构体变量成员具备和普通变量相同的性质结构体变量成员具备和普通变量相同的性质 引用运算符:引用运算符:结构体变量名结构体变量名.成员名成员名 指向运算符:指向运算符:结构体变量名结构体变量名-成员名成员名 可以将一个结构体变量赋值给另一个结构体变量可以将一个结构体变量赋值给

14、另一个结构体变量 结构体嵌套时逐级引用结构体嵌套时逐级引用 例例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,*p=&stu1; stu1.num=10; stu1.score=85.5;p-sex=F;例例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1;numnamebirthdaymonthdayyearstu1.

15、birthday.month=12;C/c+语语言言程程序序设设计计 4 4 结构体数组结构体数组1)结构体数组的定义的三种形式:)结构体数组的定义的三种形式:形式一: struct student int num; char name20; char sex; int age; ;struct student stu2;numnamesexagenumnamesexagestu0stu125B形式二: struct student int num; char name20; char sex; int age; stu2;形式三: struct int num; char name20; c

16、har sex; int age; stu2;C/c+语语言言程程序序设设计计 2)结构体数组初始化和引用)结构体数组初始化和引用初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 全部初始化时维数可省struct student int num; char name20; char sex; int age;stu3=10101,Li Lin,M,18, 101

17、02,Zhang Fun,M,19, 10104,Wang Min,F,20;main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age);numnamesexagestu0pstu1stu2p+1C/c+语语言言程程序序设设计计 三、内存的动态分配三、内存的动态分配1.动态内存分配动态内存分配 动态内存分配的目的动态内存分配的目的 在执行过程中为数据对象分配合适的存储空间在执行过程中为数据对象分配合适的存储空间 动态内存分配的使用场合动态内存分配的使用场合 不能在执行前确定数据对象的存储空间大小不能在执行前确定数据对象的存储空间大小

18、 不适合在执行前为数据对象分配存储空间不适合在执行前为数据对象分配存储空间 动态内存分配函数:动态内存分配函数:“stdlib.h” 或或 “malloc.h” void * malloc( unsigned int size ); void free( void* memblock ); C/c+语语言言程程序序设设计计 有需要再分配,不需要不分配有需要再分配,不需要不分配 有分配就有释放有分配就有释放 malloc() 与与 free() 一般在程序代码的相同层次成一般在程序代码的相同层次成对出现对出现 构造复杂数据结构时动态存储分配非常有用构造复杂数据结构时动态存储分配非常有用关于动态内

19、存分配的说明关于动态内存分配的说明C/c+语语言言程程序序设设计计 四、typedef定义类型 功能:用自定义名字为已有数据类型命名 类型定义简单形式: typedef type name;类型定义语句关键字已有数据类型名用户定义的类型名例 typedef int INTEGER;例 typedef float REAL;类型定义后,与已有类型一样使用例 INTEGER a,b,c; REAL f1,f2; int a,b,c; float f1,f2; 说明说明: :1.typedef 1.typedef 没有创造没有创造新数据类型新数据类型2.2.typedef typedef 是定义类型

20、是定义类型, ,不能定义变量不能定义变量3.typedef 3.typedef 与与 define define 不同不同 definedefine typedeftypedef预编译时处理预编译时处理 编译时处理编译时处理简单字符置换简单字符置换 为已有类型命名为已有类型命名 C/c+语语言言程程序序设设计计 例例 typedef struct club char name20; int size; int year; GROUP; typedef GROUP *PG; PG pclub; GROUPGROUP为结构体类型为结构体类型PGPG为指向为指向GROUPGROUP的指针类型的指针类

21、型例 定义数组类型typedef int ARRAY100; ARRAY a,b,c; int a100,b100,c100;例 定义指针类型typedef char *STRING; STRING p,s10; char *p; char *s10;C/c+语语言言程程序序设设计计 五、c+中的引用1. 引用的概念 建立引用的作用是为变量另起一个名字,变量的引用通常被认为是变量的别名。 声明一个引用的格式如下: 类型类型 & & 引用名引用名 = = 已定义的变量名已定义的变量名; ; 例如: int i=5; int &j = i; 这里,声明了一个整数类型的引用j

22、 ,用整型变量i对它进行初始化,这时j就可看做是变量i的引用,即是变量i的别名。也就是说,变量i和引用j占用内存的同一位置。当i变化时,j也随之变化,反之亦然。引用运算符C/c+语语言言程程序序设设计计 例例 变量和引用的关系。变量和引用的关系。#include#includeusing namespace std;using namespace std;int main()int main() int i; int i; int &j=i;int &j=i; /声明声明j j是一个整型变量是一个整型变量i i的引用的引用 /这时这时j j就可看作是变量就可看作是变量i i的别

23、名的别名 i=30;i=30; couti=i j=jn; /couti=i j=jn; /输出变量输出变量i i和引用和引用j j的值的值 j=80;j=80; couti=i j=jn; /couti=i j=jn; /输出变量输出变量i i和引用和引用j j的值的值 coutcout变量变量i i的地址的地址:& &i in;n;/输出变量输出变量i i的地址的地址 coutcout引用引用j j的地址的地址:& &j jn;n;/输出引用输出引用j j的地址的地址 return 0;return 0; 程序执行结果如下: i=30 j=30i=80 j=

24、80变量i的地址:0012FF7C引用j的地址:0012FF7C注意,此地址视实际系统的运行而有所不同。 C/c+语语言言程程序序设设计计 说明: (1) 对变量声明一个引用,编译系统不给它单独分配存储单元,i和j都代表同一变量单元。 (2)在声明一个引用时,必须立即对它进行初始化,即声明它代表哪一个变量。不能声明完成后再赋值。 例如下述声明是错误的。 int i; int &j; /错误 j=i; 应该是:int i;int &j=i;C/c+语语言言程程序序设设计计 (3) 为引用提供的初始值,可以是一个变量或另一个引用。例如: int i=5; /定义整型变量i int

25、&j1=i; /声明j1是整型变量i的引用(别名) int &j2=j1; /声明j2是整型引用j1的引用(别名)这样定义后,变量i有两个别名:j1和j2。 (4) 指针是通过地址间接访问某个变量,需要书写间接运算符“*”; 引用是通过别名直接访问某个变量。 每次使用引用时,可以不用书写间接运算符“*”,因而使用引用可以简化程序。C/c+语语言言程程序序设设计计 例例 比较引用和指针的使用方法。比较引用和指针的使用方法。#include#includeusing namespace std;using namespace std;int main()int main() int

26、 i=15; / int i=15; /定义整型变量定义整型变量i,i,赋初值为赋初值为1515 int int * *iptr=&i;iptr=&i; / /定义指针变量定义指针变量iptr,iptr,将变量将变量i i的地址赋给的地址赋给iptriptr int &rptr=i;int &rptr=i; / /声明变量声明变量i i的引用的引用rptr,rptrrptr,rptr是变量是变量i i的别名的别名 couti is couti is i iendl; /endl; /输出输出i i的值的值 coutcout* *iptr is iptr is *

27、 *iptriptrendl; /endl; /输出输出* *iptriptr的值的值 coutrptr is coutrptr is rptrrptrendl; /endl; /输出输出rptrrptr的值的值 return 0;return 0; 运行结果如下:运行结果如下:i is 15i is 15* *iptr is 15iptr is 15rptr is 15rptr is 15 从这个程序可以看出从这个程序可以看出, ,如果要如果要使用指针变量使用指针变量iptriptr所指的变量所指的变量i,i,必须用必须用“* *”来间接引用指针来间接引用指针; ;而而使用引用使用引用rptrrptr所代表的变量所代表的变量i,i,不不必书写间接引用运算符必书写间接引

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论