资源描述:
《C语言程序设计6-指针-A》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、(五)复杂数据类型5.1数组5.2指针5.3结构体与共同体5.4文件第5.2章指针1)指针概述2)变量与指针3)数组与指针4)函数指针与指针函数5)指针小结与补充知识第1节指针概述一、内存变量能放什么?1、普通数据,如:a123变量a中放一个普通的数值1232、地址数据,如:bFFC0变量b中放一个地址数据FFC0变量可以存放数值或字符,也可以存放地址。二、为什么要存放地址数据?“地址”就是某块内存空间的位置。若知道某内存空间的地址,就可获取该地址对应内存空间内的数据值。不仅如此,若知道某个内存空间的地址,则还可以根据该地址获
2、取其前面或后面的内存空间中的数据。FF12120FF10150FF0E100FF0C98FF0A89FF0878FF0656FF0460FF0245FF0020地址内存空间中的值例如:知道FF08这个内存地址以后,除可以获取78这个数外,还能获取前后的数据,如56,89,98,120等。三、指针是什么?由于内存地址总是与内存空间相对应,可以认为内存地址指向了内存空间,因此,内存地址又称为指针。也就是说,指针即是地址。1)C程序中每一个实体(变量、数组和函数等)都要在内存中占有一个可标识的存储区。2)存储区的地址是指该存储区域中
3、第一个字节的地址:首地址。3)C语言除允许在程序中用名字引用一个实体之外,还允许在程序中取用该实体的地址。如:inta;//编译时申请空间确定地址scanf(“%d”,&a);//运行时用地址FF12120FF10150FF0E100FF0C98FF0A89FF0878FF0656FF0460FF0245FF0020地址内存空间指针四、内存的访问方式注意:变量的三个要素变量的名字、变量的地址、变量的值※直接访问:指通过变量名直接访问程序中一个实体的存储空间。如:i=3,j=6,k=9;//通过变量i、j、k来访问存储单元※间接
4、访问:指通过存放地址的单元间接找到实体的存储空间。如:变量i,不知道其值,而只知它的地址是3010和3011,可通过存放的地址间接访问变量i的值。注意:对于间接访问,可以定义一种变量,专门用来存放其它实体的地址,以方便间接访问。如:i-pointer;i-pointer=&i;//指针变量五、变量指针与指针变量变量指针:变量的地址值。如:变量a,b的指针分别是FF02,FF04指针变量:保存内存地址的变量。如:pt,pr变量,它们的值分别为FF02,FF04指向:如果某个指针变量保存有内存地址,则认为该指针变量指向了该内存地址
5、对应的内存空间。FF12120FF10150prFF0EFF04ptFF0CFF02FF0A89FF0878FF0656cFF0460bFF0245aFF0020变量名地址内存空间六、重视指针的学习1)指针作用巨大:可以方便随意地在内存中自由操作。2)指针的理解和使用有些许难度:用不好反受其害。3)指针是C语言的重点、难点和精华:不掌握好指针等于没有学好C语言。第2节变量与指针一、指针变量的定义数据类型标识符*指针变量名;与普通变量定义没有太多区别,只是在变量前加一个指针运算符*号而已。指针变量的类型是指针变量所指向的实体变量
6、的类型,也称为指针变量的基类型。如:int*q,*p;//指针变量p,q只能存放整型变量的指针或地址注意:1)*是指针运算符,意为:“指向…的指针”。2)指针变量是具有确定的指向的数据类型。区别:变量的指针-指向变量的指针变量1)变量的指针:变量的地址。2)指向变量的指针变量:存放变量地址的变量。二、指针变量的赋值1、指针变量的初始化inta=10,b=20;int*p=&a,*q=&b;2、指针变量的赋值inta;int*p;p=&a;1020FFC0FFC2FFC0FFC2FFC4FFC6abpq变量值变量名变量地址三、指
7、针变量的使用例如:inti,j,*p;p=&i;//是使指针变量p指向变量i*p=3;//等价于i=3;j=*p+2;//等价于j=i+2;注意:1)p是指针变量,而*p不是指针变量,是p所指向变量的内存空间内的值。2)“*”:为指针运算符(指向运算符、间接运算符、取值运算符)为单目运算符。(*p表示p所指向的变量i的值)3)“&”:为取地址运算符,为单目运算符。(&i表示变量i的地址)4)定义指针变量,但没有赋给它确定初值(地址),这对于系统或程序都是很危险的,一定要避免。四、指针变量的理解1、指针变量的值:所指向变量的地址
8、。2、指针(向)值:指针(地址)对应的内存空间的值。用指针(取值)运算符*号表示:*指针变量、*内存地址3、指针变量的地址:变量都是有地址的。用取址运算符&号表示:&变量4、指针运算符*与取址运算符&的优先级和结合性:优先级处于第2位,结合性是自右向左(++--)如:inta