精通C程序设计第六章指针初步.ppt
《精通C程序设计第六章指针初步.ppt》由会员分享,可在线阅读,更多相关《精通C程序设计第六章指针初步.ppt(43页珍藏版)》请在三一办公上搜索。
1、第六章 指针初步,本章内容提要:6.1 指针的概念与基本操作6.2 指针与一维数组 6.3 字符串处理 重点小结作业,6.1 指针的概念与基本操作,6.1.1 指针的概念1.什么是指针?指针是C语言的一种数据类型,该数据类型以内存地址为值,并提供了相关的一系列操作。2.使用指针的优点与缺点直接访问内存,增强了高级语言的功能编程灵活度增加不易学习、掌握和正确安全地使用好指针,6.1 指针的概念与基本操作(续1),3.指针的基本属性(1)值属性:指针值即内存地址,它是一个非负整数(2)存贮属性:老式16位编程有三种,分别是:a.near(近)指针:16位段内偏移地址b.far(远)指针:16位段地
2、址16位段内偏移地址c.huge(巨)指针:32位规格化的内存地址 32位编程模式下,只有一种32位规格化地址(指针),不再区分near,far和huge。,(3)对象属性:指该地址开始(指针指向)的内存单元中存放的数据。定义指针变量时,必须指定指针变量的对象类型。我们使用指针的主要目的就是通过指针访问内存中的数据。如:double p;/指针p的对象是一个double型数据/指针p指向一个double型数据 void p;/指针p指向nothing/无值指针不能进行运算和存取操作,6.1 指针的概念与基本操作(续2),6.1 指针的概念与基本操作(续3),6.1.2 指针常量与变量1.指针常
3、量(只有三种)(1)空指针:NULL符号常量NULL定义于头文件stdio.h中,其值为整数0,代表地址0和空指针的概念。空指针是值为0的指针(即NULL);空对象(无值)指针是没有对象不能进行存取操作的指针。(2)数组的名字:它是数组的首地址(3)函数的名字:代表子程序调用的入口地址,6.1指针的概念与基本操作(续4),2.指针变量(1)定义方法:对象类型名 指针变量名;例:int p,q;double r;char s;注意:4/VC+6.0sizeof(p)=sizeof(q)=sizeof(r)=sizeof(s)=2/TC2.0说明:以VC+6.0为例,每个指针变量用于保存一个32位
4、(4字节)内存地址。指针变量的存储长度与其对象类型无关。(2)指针类型名 T 例如:double r;char p;p=(double)r;,6.1指针的概念与基本操作(续5),(3)指针变量的初始化 C语言允许用指针常量表达式对指针变量初始化.例:int a4,p=NULL,q=a+1;#include double(f)(double)=sin;注意:(a)不能将一个整数值直接作为内存地址对指针变量进行初始化。如:long p=0 x410;,6.1指针的概念与基本操作(续6),(b)作为一种特殊情况,C语言允许用一个字符串常量初始化一个char*型的指针变量如:char s=ABCD;变
5、量s得到的是字符串常量第一个字符(字母A)的地址,即串首地址。6.1.3 指针的基本运算与操作1.取地址运算:,6.1指针的概念与基本操作(续7),2.取对象运算:指针表达式例1:int a=123,p;p=/则打印结果为A理解帮助-指针、指针变量与指针对象的关系,6.1指针的概念与基本操作(续8),若有定义:double p;char q;假设指针变量p的值(即变量p保存的地址值)为0 xB8000000,表达式p表示从p保存的地址值指定的内存中取一个double型数据(即从内存地址0 xB8000000开始连续取8字节单元)。若q的值也是0 xB8000000,表达式q表示从q保存的地址值
6、指定的内存中取一个float型数据(即从内存地址0 xB8000000开始连续取4字节单元)。若有定义:float a=0.5f,r=后,有 表达式r表达式a 表达式 r表达式&a,6.1指针的概念与基本操作(续9),3.指针对象的有关操作 指针对象可进行与之同类型变量的所有运算。例:int a,p=,6.1指针的概念与基本操作(续10),4.正确建立指针对象的方法(1)用已有的变量或数组空间建立对象例:int a=15,p,q,b3;p=(2)用内存分配函数建立对象 介绍两个函数:头文件均为stdlib.h 函数原形:void malloc(unsigned n)函数功能:分配n字节连续内存
7、单元供用户使用,分配成功,返回首地址,分配失败,返回NULL。,6.1指针的概念与基本操作(续11),函数原形:free(void p)函数功能:释放由malloc分配的内存单元。自变量p给出内存块的首地址。malloc与free函数一般配对使用(有分配就应有释放).例:double p;p=(double)malloc(8);/分配8字节内存 p=0.5;/p所指对象存入0.5 free(void)p);/释放p所指对象,6.1指针的概念与基本操作(续12),极不安全的对象用法:(1)double p;p=0.5;/p是指向哪里呢?(2)double p;p=(double)malloc(4
8、);/空间没有分配够 p=0.5;(3)double p;p=(double)malloc(8);p=(double)malloc(8);/先前分配的8字节呢?后果:突然死机/重启动/出现对话框“程序执行了非法操作”(往往不得不手工重启动),6.1指针的概念与基本操作(续13),5.指针运算(指针表达式也称为地址表达式)(1)指针加减整型表达式n:仍得同类型指针运算规则:地址值增减n倍对象类型长度例:long a=1,2,3,4,p=a;p=a+2;/*p指向元素a2,即p=即p指向下一个对象*/,6.1指针的概念与基本操作(续14),特殊表达式:(a)p+;和 p-;先取用对象,然后p自加减
9、1(b)+p;+p;-p;-p;这四种形式都是p先自加减1,然后再取用对象对比:+(p);(p)+;-(p);(p)-;这是对象自加减1,6.1指针的概念与基本操作(续15),(2)两个对象类型相同的指针进行加法运算 例:int p,q,s;s=p+q;/*合法但无用处*/(3)两个对象类型相同的指针进行减法运算:得相距的对象长度的倍数(可正可负)例:int a5,p,q;p=则pq1而pq0,6.1指针的概念与基本操作(续16),6.指针的输入与输出 scanf与printf函数采用p格式符。很少实际应用。,TC2.0,6.2 指针与一维数组,6.2.1 对象表达式与元素表达式的等价互换形式
10、C/C+语言中,对任意指针ptr,整型表达式i,恒有对象表达式 元素表达式(都是L_value)(ptr+i)ptriC/C+语言为什么不检查数组下标越界?答:若有数组定义T an;则元素表达式ai,不论i取何值,永远是合法表达式,因为 ai(a+i),a是一个指针常量,6.2 指针与一维数组(续1),6.2.2 一维数组名若有定义:T an;T:数据类型名 n:整型常量则数组名 a的数据类型为 T;值为则 a+ip+i&ai&pi/地址等价形式(a+i)(p+i)aipi/元素等价形式,6.2 指针与一维数组(续2),应用举例:将数组下标变成从1开始若有定义:T an,p=a-1;则 p1,
11、p2,pn 依次等价于 a0,a1,an-1程序例1(教材例6.2)建立N元(N用#define定义)整型数组,实现数组元素的逆序存储,然后输出逆序后的数组元素。要求算法不得另辟数组空间。比如:N=8,数组元素原来的值是 3 5 27910 64 则逆序存储以后的值是 4 6 10 9 7 2 5 3,6.2 指针与一维数组(续3),算法设计:以数组下标中点为对称轴,交换对称位置的数组元素。下标算法:aiaN1i i=0,1,N/21指针算法:初态p=a;q=a+N1;p+q 直到p=q/*下标法*/#include stdio.h#define N 8void main()int aN,i,
12、t;printf(Input%d integers:n,N);for(i=0;iN;i+)scanf(%d,a+i);for(i=0;iN/2;i+)t=ai;ai=aN1i;aN1i=t;for(i=0;iN;i+)printf(%6d,ai);printf(n);,6.2 指针与一维数组(续4),/指针法/#include stdio.h#define N 8void main()int aN,p,q=a+N1,t;printf(Input%d integers:n,N);for(p=a;p=q;p+)scanf(%d,p);p=a;while(pq)t=p;p=q;q=t;p+;q;fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精通 程序设计 第六 指针 初步
链接地址:https://www.31ppt.com/p-6330346.html