




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章 内存的快捷方式指针 p 指针概述 p 指针变量 p 指针与函数 p void指针类型 p 综合应用创建简单链表 p 跟我上机 第11章 内存的快捷方式指针 指针概述 p 指针变量 p 指针与函数 p void指针类型 p 综合应用创建简单链表 p 跟我上机 第11章 内存的快捷方式指针 指针概述 指针变量 p 指针与函数 p void指针类型 p 综合应用创建简单链表 p 跟我上机 第11章 内存的快捷方式指针 指针概述 指针变量 指针与函数 p void指针类型 p 综合应用创建简单链表 p 跟我上机 第11章 内存的快捷方式指针 指针概述 指针变量 指针与函数 void指针类型 p 综合应用创建简单链表 p 跟我上机 第11章 内存的快捷方式指针 指针概述 指针变量 指针与函数 void指针类型 综合应用创建简单链表 p 跟我上机 第11章 内存的快捷方式指针 指针概述 指针变量 指针与函数 void指针类型 综合应用创建简单链表 跟我上机 11.1 指针概述 11.1.1 内存地址 11.1.2 内存和指针 11.1.1 内存地址 在计算机程序中使用的所有数据,都必须存 储在计算机的存储单元中,并且应能从计算 机的存储单元中取出。每个存储单位都有唯 一的地址,这就好比街道上每家每户都会有 自己的门牌号码一样,如下图所示,内存中 从地址1234到地址1237中,存储了一个整 型数值12,而内存中地址1238中,存储了 一个字符“A”。 11.1.1 内存地址 计算机内存被划分成按顺序编号的内存单元 ,这就是地址。如果在程序中定义了一个变 量,在对程序进行编译时,系统就会给这个 变量分配内存单元。 变量是内存中某一块存储区域的名称,对变 量赋值就相当于把值存储到该存储区域中, 看下面的表达式: 4 字节 12341237 内存中开辟空间 存储数据到内存 int total=12; 11.1.1 内存地址 不同的计算机使用不同的复杂的方式对内存进行编号,通常程 序员不需要了解给定的变量具体地址,编译器会处理细节问题 ,在C语言中,你只需要使用操作运算符 printf(“i的值等于%d,i的地址是n“,i, 输出结果如下: i的值等于12,i的地址是1245052 运行的结果很清晰的显示出变量i的地址,获得变量i的地址是通过 取地址运算符 /*声明指向整型变量的指针p1*/ char c;/*声明变量c */ char * p2; /*声明指向字符型变量的指针p2*/ p1 = /*指针赋值*/ p2 = /*指针赋值*/ 变量p2 变量p2地址是 char c; int *p; p = 以下是错误的赋值 int i; char c; int *p; p = 指针变量中只能存放指针 (地址),不要将一个非零数(或任何其他非地址类型的数据) 赋给一个指针变量。 int *p=2;/*错误的赋值*/ int *p=0;/*正确的赋值,表示指针指向空*/ 11.2 指针变量 11.2.1 初识指针变量 11.2.2 使用指针变量 11.2.3 指针的运算 11.2.1 初识指针变量 指针变量也是变量,假如该指针变量名叫p,变量p的用途比较 特殊,它很无私,它代表的存储单元中存储的是另外一个变量 的地址,假如该变量名叫a,可以理解为这个指针变量p指向变 量a。当然可以直接访问a从而获得a的数据,也可以间接地通 过访问p从而获得a的数据。 比如有下面的代码。 int i=1; int *p= *p=*p+1; printf(“i=%d,*p=%d”,i,*p); 输出结果:i=2,*p=2 代码中p= 05 char c,*p2; 06 i=12;/*变量i初始化*/ 07 c=A;/*变量c初始化*/ 08 p1= /*把变量b的地址赋给p2*/ 09 p2= /*输出结果*/ 10 printf(“i=%d, /*输出i, /*输出p1,/*输出c,/*输出p2, 05 int *p1,*p2,*p;/*声明三个指针变量*/ 06 p1=/*初始化p1和p2,p1指向a,p2指向b*/ 07 p2= 08 printf(“请输入变量a和变量bn“);/*输入a和b的值*/ 09 scanf(“%d %d“, 10 if(a 02 int main(void) 03 04 int a=1,b=10; 05 int *p1,*p2; 06 p1= /*指针赋值*/ 07 p2= 08 printf(“p1地址是%d,p1存储的值是%dn“,p1,*p1);/*输出*/ 09 printf(“p2地址是%d,p2存储的值是%dn“,p2,*p2);/*输出*/ 10 printf(“p1-1地址存储的值是%dn“,*(p1-1);/*地址-1后存储的值*/ 11 printf(“p1地址中的值-1后的值是%dn“,*p1-1);/*值-1后的值*/ 12 printf(“*(p1-1)的值和*p1-1的值不同n“); 13 return 0; 14 11.3 指针与函数 11.3.1 指向函数的指针 11.3.2 返回指针的函数 11.3.1 指向函数的指针 用指针变量可以指向一个函数。函数在程序 编译时被分配了一个入口地址。这个函数的 入口地址就称为函数的指针。 函数指针变量常用的用途之一是把指针作为 参数传递到其他函数。指向函数的指针也可 以作为参数,以实现函数地址的传递,这样 就能够在被调用的函数中使用实参函数。 11.3.1 指向函数的指针 【范例11-6】 指向函数的指针 11.3.2 返回指针的函数 函数可以返回数值型、字符型、布尔型等数 据,也可以带回指针型的数据叫做返回指针 值的函数。定义形式为: 类型名 *函数名(参数表列); 例如下式表示的含义是,max函数调用后返回值的 数据类型是整型指针。 int *max(int *x, int *y); 11.3.2 返回指针的函数 【范例11-7】 返回指针的函数 11.4 void指针类型 void指针类型,它可以用来指向一个抽象的类型的 数据,在将它的值赋给另一指针变量时要进行强制 类型转换使之适合于被赋值的变量的类型。 通过具体的例子来说明void指针类型的含义和用法,如下代 码所示: char *p1; void *p2; p1=(char *)p2; 同样可以使用(void *)p1将p1转换成void * 类型,如下代 码所示: p2=(void *)p1; 11.4 void指针类型 不只对变量可以使用void指针类型,也可以 将一个函数定义为void *类型。比如下面代 码,表示函数fun返回的是一个地址,它指 向空类型,如需要引用此地址,也需要根据 情况对之进行类型转换,如对该函数调用得 到的地址要进行以下转换。如下代码所示: void * fun(char ch1,char ch2); p1=(char *)fun(ch1,ch2); 11.5 综合应用创建简单链表 【范例11-8】 创建简单链表 单链表是一种简单的链表表示,也叫做线性链表。 用它来表示线性表时,用指针表示结点间的逻辑关 系。因此单链表的一个存储结点包含两部分内容。 datalink 11.5 综合应用创建简单链表 data部分称为数据域,用于存储线性表的一 个数据元素;link部分称为指针域,用于存 放一个指针,该指针指示该链表下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字笔顺的课件
- 汉字的构造及分类课件
- 广东省肇庆市2024-2025学年高二下学期期末考试物理试题(含答案)
- 工厂车间承包合同(5篇)
- 2024-2025学年广东省揭阳市普宁市二中七年级(下)第一次月考数学试卷(含答案)
- 《史记》的当代价值转换知到智慧树答案
- 年度个人先进工作总结
- 《Android移动应用开发基础》知到智慧树答案
- 能源环保产业前景分析报告
- 2024年秋新北师大版数学一年级上册 第四单元 一起做游戏 教学课件
- 2025版《折弯机安全操作规程》全
- 2024版标准性二手车贷款合同模板(含车况鉴定)3篇
- 孕期阴道炎的健康宣教
- DB32-T 4467-2023 南美白对虾小棚养殖尾水生态化处理技术规程
- 31个工种安全技术交底
- 人工智能概论课件完整版
- 管道承诺质量保证书范本
- 门窗订购电子合同模板
- 渠道衬砌施工方案(渠道预制混凝土块)
- 台州市开发投资集团有限公司招聘笔试题库2024
- 达州事业单位笔试真题2024
评论
0/150
提交评论