版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章内存管理12回顾函数的作用函数的声明格式和各部分作用函数中的实参和形参的区别函数的调用3回顾字符信息在计算机中的描述字符信息的存储方式字符信息的处理函数4目标了解内存地址、指针的概念理解指针和数组之间的关系掌握指向一维数组的指针操作5内存地址数据类型的不同,每个变量需要分配的内存单元数目也不同每个变量都需要分配连续的内存单元inti=3;Intj=5;floatf字符型变量需要占用1个内存单元;短整形变量需要占用连续的2个内存单元;单精度变量需要占用连续的4个内存单元;双精度变量需要占用连续的8个内存单元。6变量与地址当变量只占用一个内存单元时,内存单元的地址就是变量的地址;当变量占用连续的若干个内存单元时,最前面一个单元的地址就是该变量的地址,这一地址称作为首地址。变量名数据类型地址i整型2001j整型2003f单精度2005inti=3,j=5,float=f;7数组与地址当一个数组占用连续的若干个内存单元时,最前面的单元地址称为数组的首地址,也是第一个数组元素的地址,通常用数组名代表数组的首地址数组占用的总单元数等于数组长度*每个数组元素占用的内存单元数对一个数组来说,所分配的内存单元必须是连续的,并且是按照顺序对应数组元素的int[3]={1,2,3};数组元素a[i]的地址=数组首地址+i*数组元素的数据类型所占用单元数数组元素a[1]的首地址:3000+1*2=30028指针指针是一种数据类型,专门用于存放内存地址。按照这一类型可以定义相应的变量,这个变量就是指针变量,变量中存放的数据就是地址地址的宽度是固定的32个二进制位,所以指针变量占据的宽度也是固定的4字节数据类型*指针名=初值数据类型不是指针变量中存放的数据类型,而是它将要指向的变量或数组的数据类型定义成某种数据的指针变量,将来只能用来指向同种数据类型的其它变量或数组*运算符是指针运算符在此地作用是将一个变量声明为指针变量。“初值”通常是“&普通变量名”、“&数组元素”或“数组名”9指针先定义了整形变量a,然后定义一个指向整形变量的指针变量p,并赋初值为事先定义的变量a的地址,即指针变量p指向整形变量a,指针变量p中存储着变量a的首地址inta;Int*p=&a;1000H251000H10指针floatf1,f[10];float*p1=&f1;float*p2=f;先定义单精度形变量f1和数组f;然后定义一个指向单精度形的指针变量p1,并为其赋初值,使其指向变量f1,即指针变量p中存储着变量f的首地址;最后再定义一个指向单精度形的指针变量p2,并为其赋初值,使其指向事先声明的一维数组,即变量p中存储着一位数组的首地址。pointer_1=100;pointer_1为指针变量,100位整数11指针变量的引用方式inti=10;int*p_i;p_i=&i;printf(“通过指针来操纵数据,显示变量i的值:%d”,*p_i);1000H10iP_i通过指针来操纵数据,显示变量i的值:101000H12指针变量的引用方式inti;int*p_i;p_i=&i;*p=123;printf(“变量i的值:%d\n指针所指向的值:%d\n”,i,*p);指针变量一旦声明赋初值后,就可以替代它所指向的变量。1000H123iP_i通过指针来操纵数据,显示变量i的值:1231000Hinti;int*p_i;p_i=&i;*p=123;printf(“变量i的值:%d\n指针所指向的值:%d\n”,i,*p);指针变量一旦声明赋初值后,就可以替代它所指向的变量。123iP_i13
指向数组元素的指针指针变量指向数组元素,即某一元素的地址放到一个指针变量中inta[10];//定义a为包含10个整形数据的数组int*p; //定义p为指向整型变量的指针变量p=&a[0];//把a[0]元素的地址赋给指针变量p,也就是说,p指向a数组的第0号元素14指向数组的指针在声明数组时,实际上是声明了一个指针,这个指针保存了一个连续空间的首地址,这个指针就是数组名和普通指针不一样的一点在于,数组名中保存的地址是恒定不变的,而普通的指针变量中保存的地址是可以改变的inta[10];int*p=a;intx;p=&x;inta[10],b[10];a=b;1000HaP1000H01……52342000Hx2000H15指向数组的指针的移动指针变量p已指向数组中的一个元素
则可以通过指针自加来访问数组中的其它元素:p+1指向同一个数组中的下一个元素。
inta[10];int*p=a;intx=*(p+2)例如数组元素是实型,每个元素占4个字节,则p+1所代表的地址实际上是p+1*d,d是一个数组元素所占据的字节数1000Ha01……52342000HP1000HP+2x*(p+5)=*(a+5)=a[5]16指向字符串的指针第一种方法是给指针变量赋初值的方式,格式为“*指针变量=字符串常量”
第二种方法是先定义一个字符型指针变量,然后再赋值的方式,其格式为“指针变量=字符串常量”。char*p=“ABCDE”char*p;p=“ABCD”1000H匿名P1000HA B……\0CDE17指向数组的指针示例判断所输入的字符串是否是数字字符串
#include"stdafx.h"#include"string.h"voidmain(){ char*p1="0123456789"; chara[100];/*指针p2指向数组中第一个元素的首地址,也可写成char*p=a效果是一样的,只是含义有所不同,代码中指针式指向数组中元素的,而char*p=a是指向数组的。*/char*p2=&a[0];/*设标志位初值0,代表不为数字。*/ charflag='0'; printf("请输入待处理的字符串\n"); gets(a);18指向数组的指针示例while(*p2!='\0')//p2指针所指向的数组中的元素是否为字符串结束标记{while(*p1!='\0')//p1指针所指向的数组中的元素是否为字符串结束标记
{/*如果两个指针所指向的元素相同,即输入字符串中的当前元素为数字,那么跳出内层循环,读取下一个待比较的元素*/if(*p2==*p1){ flag='1';break;}p1++;//p1指针移动到下一个元素
}if(flag=='0') break;p2++;//p2指针移动到下一个元素19指向数组的指针示例} if(flag=='1') printf("所输入的字符串为纯数字串"); else printf("所输入的字符串不是纯数字串");}20指向数组的指针示例输入n个单精度数存入一维数组,用指针变量处理数组元素的方式将其逆序存放后输出。N从键盘输入。#include"stdafx.h"voidmain(){ floata[20],x,*pb,*pe; intn,k,i; scanf("%d",&n); pb=a; for(i=0;i<n;i++) scanf("%f",pb++);//通过移动指针完成数组a元素的赋值
k=n/2;//设置需要交换的最大下标21指向数组的指针示例for(i=0,pb=a,pe=a+n-1;i<k;i++,pb++,pe--)/*pe指向数组中最后一个有效元素,a+n-1中a代表数组首地址,n-1即为从0开始到n-1共n个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全员A证考试综合练习(突破训练)附答案详解
- 安全员A证考试考前冲刺练习试题含答案详解(培优)
- 安全员A证考试考试综合练习(满分必刷)附答案详解
- 小学六年级语文阅读能力提升训练方案
- 安全员A证考试题型+答案(考点题)附完整答案详解【历年真题】
- 学生良好习惯养成活动方案
- 企业员工档案电子化管理方案
- 安全员A证考试题库检测模拟题(能力提升)附答案详解
- 企业办公用品标准化管理制度
- 安全员A证考试练习题附答案详解【夺分金卷】
- 民法典关于物业管理的规定课件
- 辞工欠薪协议书
- 危货运输企业安全生产责任书范文二零二五年
- 2025年安徽粮食工程职业学院单招综合素质考试题库完整
- 2025年土地代持租赁协议
- 影视项目策划与后期制作流程
- 相信我支持我作文3篇
- (完整版)韩国商法
- 《既有工业区改造环境提升技术导则》
- 湖北省荆州市八县市2023-2024学年高二上学期期末考试物理试卷
- 五年级上册道德与法治期末测试卷推荐
评论
0/150
提交评论