资源描述:
《第6章++指++++针》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第6章指针内容提要本章主要介绍指针的概念如何用指针来访问变量、数组,如何用指针来处理字符串如何用指针来进行动态内存分配。地址、指针和指针变量的概念1.地址的概念(1)在计算机中,内存是一个连续编号或编址的空间。也就是说,每一个存储单元(在微型计算机中通常是一个字节)都有一个固定的编号,就像门牌号码一样,这个编号称为地址。(2)变量代表了内存中的一个位置,1个变量要占用1个或几个存储单元,例如,int型变量要占2字节,float型的变量要占4字节等,我们把变量所占用的存储单元首字节的地址作为变量的地址。地址
2、的运算有关地址的运算有两个:取地址运算和访问地址运算。(1)取地址运算符&用来获得变量或数组元素的地址,它的使用格式为&v其中,v是变量或数组元素。这种运算已在scanf()中大量使用过,这里只对&运算符作两点简要说明。(2)*和[]是两个等价的访问地址运算符,它们都用来访问指定地址中的数据。指针的定义和用指针访问变量1.指针的定义定义指针的一般形式为:[存储类型]数据类型*指针1,*指针2,......这里*只是一个说明符,它既不是乘法符号,也不是访问地址符号指针访问变量的方法、空指针和void型指针要
3、用指针访问变量,先要将指针指向变量,然后才能访问变量。没有指向某一数据对象的指针称为空指针,未指定指向特定数据类型对象的指针可以定义为void型指针。指针的运算指针的运算就是地址的运算。由于这一特点,指针运算不同于普通变量,它只允许有限的几种运算。除了可对指针赋值外,指针的运算还包括移动指针、两个指针相减、指针与指针或指针与地址之间进行比较等。1.移动指针2.两个同类型指针相减3.指针的比较用指针访问一维数组1.使指针指向一维数组要用指针访问一维数组,首先要定义指向一维数组的指针,可以通过初始化或赋值的方
4、式将一维数组的首地址(即数组名或第一个元素的地址)保存在数组指针中。例如,定义inta[5],*p=a;或inta[5],*p=&a[0];后,指针p就与数组a建立了“指向”的关系。2.用指针访问一维数组由于数组占用的是一片连续的存储单元,一旦定义了指向数组的指针,就可以通过移动指针来访问数组的各个元素。用指针访问二维数组如果定义了指向二维数组的指针,也就可以用指针来访问二维数组的各个元素。与一维数组不同的是一维数组的逻辑结构和存储结构是一致的,都是占用线性空间,而二维数组的逻辑结构和存储结构是不同的,逻
5、辑结构是二维空间,存储结构是线性空间。用指针处理字符串在C语言中,字符串只能通过字符型数组来存储和处理。可以通过初始化的方法将字符串作为一个整体存放到字符型数组中,也可以通过赋值的方法将字符串中的字符逐个存放到字符型数组中,但是不能将字符串整体赋值给字符型数组。如果定义了一个指向字符型数组的指针,则在处理字符串的时候,既可以通过改变下标的方式,也可以通过改变指针“指向”的方法逐个访问字符串中的字符。二级指针1.一级指针、二级指针和多级指针的概念前面介绍的指针都是一级指针。一级指针是直接指向数据对象的指针,
6、即其中存放的是数据对象,如变量或数组元素的地址。用指针进行内存动态分配1.内存动态分配的含义2.动态内存分配的步骤3.内存动态分配函数本章总结本章应重点掌握地址、指针和指针变量的概念,用指针访问变量、一维数组和二维数组的方法,用指针处理字符串的方法,以及多级指针和动态内存分配的概念。难点是指针的运算,访问地址运算符*和[]的等价关系,行指针和指针数组的使用。本章习题一、选择题1.设有以下语句,则_______不是对a数组元素的正确引用,其中0≤i<10。inta[10]={0,1,2,3,4,5,6,7,
7、8,9},*p=a;A.a[p–a]B.*(&a[i])C.p[i]D.*(*(a+i))2.在程序:main(){inta[10]={1,2,3,4,5,6,7,8,9,0},*p;p=a;printf("%x",p);printf("%x",p+9);}中有两个printf(),如果第一个printf()输出的是194,则第二个printf()输出是______。A.203B.212C.1a4D.1a6本章习题3.有如下程序段:int*p,a,b=1;p=&a;*p=10;a=*p+b;执行该
8、程序段后,a的值是____。A.12B.11C.10D.编译出错4.若有说明:inti,j=2,*p=&i;,则能完成i=j赋值功能的语句是____。A.i=*p;B.*p=*&j;C.i=&j;D.i=**p;5.若有以下定义和语句:inta[]={1,2,3,4,5,6,7,8,9,10},*p=a;则值为3的表达式是____。A.p+=2,*(p++)B.p+=2,*++pC.p+=3,*p++D.p+=2,++*p本章