资源描述:
《《C语言综合实验》1数组与指针》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1C语言综合实验谢颂华whxiesonghua@163.com2C语言综合实验指针与数组构造数据类型链表3指针与数组基本概念变量的指针和指针变量指针和数组指针和字符串指针函数和函数的指针指针数组例题讲解4主要内容指针的引用和运算方法数组、函数和字符串与指针的关系学习难点指针变量的引用指针作为函数参数的运用5基本概念内存:内部存储器,是由存储单元组成的。特点:存储单元是线性连续。存储单元的最小单位是字节。1.内存的概念6地址:为了访问内存中的某个存储单元,我们要为它编号,这种编号称为内存地址。通过地址就能够访问该地址所标识的存储单元。内存单元的地
2、址和内存单元的内容的区别:2.地址的概念inti,j,k;i=3,j=5;…低地址高地址2000200220043000ijk000000110000000000000101000000007变量的地址:变量在内存中占用几个连续的字节,开始字节的地址,就是变量的地址。2007变量的指针:一个变量的地址称为该变量的指针,指针是内存地址的别名。指针变量:若一个变量专用于存放另一个变量的地址(指针),则该变量称为指针变量(特殊性,指针变量的存储单元存放的不是普通数据,而是地址)注意区分“指针”和“指针变量”这两个概念。指针的对象:当把变量的地址存入指
3、针变量后,我们就可以说这个指针指向了该变量。变量的存取方法:直接存取和间接存取直接存取:直接根据变量名存取数据间接存取:通过指针变量存取相应变量的数据10②数据所占有的内存单元个数是由其数据类型决定的;③首地址:即第一个内存单元的地址;④表示地址的数与整数的区别;⑤变量i、j的地址可能相邻,也可能不相邻,是由系统分配的,我们不必关心。3.说明①程序中定义的每个变量在编译后都占有各自的内存单元,系统是通过内存地址对变量进行存取的;变量的指针和指向变量的指针变量一、指针变量的定义一般形式:类型标识符*变量名;例如:int*ptr1,*ptr2;指针
4、变量的类型:指明了该指针指向的内存空间所存储的数据的类型在定义指针变量时要注意以下几个问题:⑴变量名ptr2前面的"*”不能省略,如果写成int*ptr1,ptr2;则ptr2被定义为整型变量,而非整型指针变量。12⑵定义中的"*”表示所定义的变量是指针变量,但指针变量名是ptr1、ptr2,而非*ptr1、*ptr2。⑶指针变量只能指向定义时所规定类型的变量。这个规定的类型称为该指针变量的"基类型”。如:上例中ptr1、ptr2只能指向整型变量,不能指向实型或字符型变量。其"基类型”相同,都是整型。⑷定义指针变量后,并未确定该变量指向何处。即
5、该变量的值是不确定的。在引用指针变量前必须首先让它指向一个变量,这一点非常重要。13二、指针变量的运算㈠指针运算符("&”和"*”)"&”(地址运算符):取变量的存储地址"*”(引用运算符):取指针所指向变量的内容例如:&i是求变量i的地址。ptr指向了i变量,*ptr表示i的值,即3还可以用这种方法实现对变量的改变:*ptr=15;//等价于i=15由此可见:通过指针运算符"*”可以引用一个变量。如:当ptr已经指向变量i后,*ptr就等同于i。进一步理解"&”和"*”:"&”运算和"*”运算是一对互逆运算&*ptr&iptr*&i*ptri
6、等价于㈡指针的赋值运算(=)指针的赋值运算:把地址赋值给指针变量。指针的赋值运算可以是以下三种方式:⑴使用取地址运算符,把地址值赋值给指针变量。如:inti,*pi;pi=&i;⑵把指针变量的值赋给另一个指针变量。如:inti,*pa,*pb;pa=&i;pb=pa;⑶给指针变量赋值为符号常量NULL。说明:NULL是一个空指针,表示该指针变量的值没有意义。作用是为了避免对没有被初始化的指针变量的非法引用。NULL的定义在"stdio.h”中。如:int*pi;pi=NULL;16说明:(1)在定义指针变量时,可以立即将一个地址值赋给指针变量,
7、这就是指针变量的初始化。如:floatflt,*f_ptr=&flt;(2)指针变量间的赋值和引用应保证基类型相同。若有定义:int*p,i;float*q,x;则:q=&i;p=&x;(3)可以将数组名或函数名赋给某些类型的指针变量;inta[10],*ip;ip=&a[0];ip=a;(4)不能将一个整型量(或任何其它非地址类型的数据)赋给一个指针变量;int*ip;ip=3000;╳╳#includevoidmain(){inta1=11,a2=22;int*p1,*p2;p1=&a1;p2=&a2;printf("%d
8、,%d",*p1,*p2);p2=p1;printf("%d,%d",*p1,*p2);}11a122a2不定p1不定p2&a1&a2*p1*