资源描述:
《C语言程序设计 教学课件 作者 易晓梅 赵芸 第8章 指针.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章指针C语言程序设计本章要点指针数据类型的声明及运算指针与数组指针与函数指针数组多级指针本章学习目标掌握指针数据类型的声明及运算方法掌握指针与数组掌握指针与函数掌握指针数组掌握多级指针第8章指针8.1指针的基本知识8.1.1地址与指针概念每个内存单元都有一个地址,根据内存单元的地址就可以找到所需的内存单元,我们就把这个地址称为指针。内存单元的指针和内存单元的内容是两个不同的概念。一个指针是一个地址,是常量。而一个指针变量却可以被赋予不同的指针值,是变量。8.1指针的基本知识例8.1输出整形变量a,b,c在内存中的分配地址
2、。#includevoidmain(){inta,b,c;printf("%ld,%ld,%ld",&a,&b,&c);}8.1指针的基本知识8.1.2指针变量的定义指针变量的定义方式与一般的变量定义有所不同,指针变量需要在定义时用“*”作为指针类型的标识,指针变量定义的一般格式为:<存储类型><数据类型><*指针变量名>[=初始地址值];8.1指针的基本知识变量声明变量声明含义inti;声明整型变量iint*p声明p为指向整型数据的指针变量inta[n];声明有n个元素的整型数组aint*p[n];声
3、明指针数组p,它由n个指向整型数据的指针元素组成int(*p)[n];声明指针变量p为指向含n个元素的一维数组的指针变量intf();声明f为返回整型函数值的函数int*p();声明p为返回一个指针的函数,该指针指向整型数据int(*p)();声明p为指向函数的指针,该函数返回一个整型值int**p;声明P是一个指针变量,它指向一个指向整型数据的指针变量8.1指针的基本知识8.1.3指针变量的赋值与引用1.指针运算符运算符名称功能例子&取地址运算符取变量的地址。单目运算符,结合性为自右向左。&a为取变量a的地址*取内容运算符
4、与&相反,表示指针所指向的变量(取变量内容)。*是单目运算符,其结合性为自右向左。*p为指针变量p所指向的变量。8.1指针的基本知识2.指针变量的赋值方法(1)将地址直接赋值给指针变量例如,float*f=(float*)malloc(4);表示,向内存申请动态分配4个字节的内存空间,首地址赋给指针变量f。8.1指针的基本知识(2)将变量的地址赋值给指针变量例如,inti,*p;p=&i;表示,定义整型变量i,和指向整型变量的指针p,用p来记录i的地址。8.1指针的基本知识与普通变量相比较,指针变量的使用是十分特殊:(1)指
5、针变量存储的是地址,但必须使用相同基类型的变量的地址进行赋值。(2)在使用指针变量进行“间接访问”之前必须要先初始化,让指针变量指向某一个存储单元。如果不初始化,指针变量所指向的存储单元是未知的,再对其进行操作是极其危险的。(3)指针变量的操作其实是对地址的操作,因此,对指针的运算只能是赋值计算、算术计算、关系计算、取地址计算和指针计算,其中最为常见的算术运算符是“++”、“--”。8.1指针的基本知识以下列出几种常见的指针变量赋值语句:p=&a;(将变量a的地址赋给p)p=array;(将数组array的首地址赋给p)p=
6、&array[i];(将数组array第i个元素的地址赋给p)p=max;(max为已定义的函数,将max的入口地址赋给p)p1=p2;(p1和p2都是指针变量,将p2的值赋给p1)8.1指针的基本知识例8.2设置两个指针变量p1、p2分别指向变量a,b的地址,然后进行赋值输出。#includevoidmain(){inta,b;int*p1,*p2;a=10;b=20;p1=&a;p2=&b;printf("%d,%d",a,b);printf("%d,%d",*p1,*p2);}8.1指针的基本
7、知识例8.3输入两个正整数,然后按先大后小的顺序进行输出。#includevoidmain(){inta,b,*p1,*p2,*p;scanf("%d",&a);scanf("%d",&b);p1=&a;p2=&b;if(a8、运算,首先要清楚C语言的地址运算规则,即一个地址加上或减去一个整数n,其运算结果仍然是一个地址,inta,*p=&a;p=p+3;8.1指针的基本知识(2)指针变量的++、--运算指针变量++、--运算,是指针变量本身地址值的变化,指针变量++运算后指向下一个数据的起始地址,指针变量--后