指针是C语言的重要概念.ppt
《指针是C语言的重要概念.ppt》由会员分享,可在线阅读,更多相关《指针是C语言的重要概念.ppt(45页珍藏版)》请在三一办公上搜索。
1、第十章 指针,指针是C语言的重要概念,是C语言的特色,是C语言的精华。10.1 地址和指针的概念内存中的每一个字节都有一个地址。内存单元的地址与内存单元的内容是两个完全不同的概念。在编译时给出了变量名和地址的对应关系。,以前在程序中定义整形等变量。如int a,b;表示a和b申请整形单元,分别存放两个整形值。我们也可以定义一种特殊的变量,它用来存放内存单元地址。这种变量的值是一个地址,它的作用是:根据地址去找相应的单元,因此,这种装载地址的变量又可称为“指针变量”。指针变量的值就是指针即地址。,10.2 变量的指针和指向变量的指针变量变量的指针就是变量的地址。存放地址的变量称谓指针变量。为了表
2、示指针变量和它所指向的变量之间联系,程序中用*符号表示“指向”如用i_point表示指针变量,而*i_point就表示i_point指向的变量。10.2.1 定义一个指针变量C语言规定所有变量在使用前必须定义,指定其类型,并按此分配内存单元。,int i,j;int*point1,*point2;定义了两个指向整形变量的指针变量。定义指针变量要指定“基类型”基类型是指针变量指向的变量的类型。指针变量的定义形式:基类型*指针变量名那么如何给指针变量赋值呢?point1=,10.2.2 指针变量的引用指针变量只能存放地址(指针),有两个有关的运算符:(1),point1=,10.2.3 指针变量作
3、为函数参数函数参数可以是指针变量swap(int*p1,int*p2)int temp;temp=*p1;*p1=*p2;*p2=temp;main()int a,b,*point1,*point2;a=10;b=90;point1=,10.3 数组的指针和指向数组的指针变量,一个变量有地址,一个数组包括若干个元素,每个元素都有地址.数组的指针是指数组的起始元素的地址.引用数组元素可用下标法,也可用指针法,即用指针指向所引用的元素.,10.3.1 指向数组元素的指针int a10;int*p;p=,10.3.2 通过指针引用数组元素按C语言规定:如果指针变量p已指向数组中的一个元素,则p+1指
4、向同一数组中的下一个元素(而不是将的p的值简单加1).如果p的初值为&a0,则(1)p+i和a+i就是ai的地址(2)*(p+i)和*(a+i)是p+i和a+i所指向的数组元素,即ai。可以看出,实际上是变址运算符(3)指向数组的指针变量也可以带下标,如pi与*(p+i)等价.,10.3.3 用数组名作函数参数例:main()inv(int arr,int n)int array10;:inv(array,10);:用数组名作参数时,如果形参数组中各元素值发生变化,实参数组值随之变化.,void inv(int arr,int n)int t,i,j,m=(n-1)/2;for(i=0;i=m
5、;i+)j=n-1-i;t=arri;arri=arrj;arrj=t;main()int i,a10=2,4,54,6,7,3,31,56,23,65;inv(a,10);for(i=0;i=9;i+)printf(“%d”,ai);,f(int arr,int n)等价于f(int*arr,int n)例:函数定义为:函数调用为:void swap(int x,int y)swap(a1,a2);请大家注意:(1)“值传递”和“地址传递”(2)两者之间的异同点,int m1,m2;void m_value(int array,int n)int*p,*array_end;array_end
6、=array+n;m1=m2=*array;for(p=array+1;pm1)m1=*p;else if(*pm2)m2=*p;main()int i,num10;for(i=0;i10;i+)scanf(“%d”,函数参数为数组时:(1)形参和实参都是数组名,如:main()f(int arr,int n)int a10;:f(a,10);:(2)实参是数组名,形参是指针变量,如:main()f(int*arr,int n)int a10;:f(a,10);:,(3)形参和实参都是指针变量,如:main()f(int*arr,int n)int a10,*p=a;:f(p,10);:(4)
7、实参是指针变量,形参是数组名,如:main()f(int arr,int n)int a10,*p=a;:f(p,10);:,选择法排序sort(int x,int n)int i,j,k,t;for(i=0;ixk)k=j;if(k!=i)t=xi;xi=xk;xk=t;,10.3.4 指向多维数组的指针和指针变量1、多维数组的地址 考查:int a34;a是一个数组名。a数组包含3行,即看成3个元素:a0、a1、a2。而一个元素又是一个一维数组,包含4个元素。a0所代表的一维数组包含的4个元素是:a00、a01、a02、a03从二维数组来看,,a代表整个二维数组的首地址,也就是第0行的首地
8、址,即a0地址a+1代表第1行的首地址,即a1地址a+2代表第2行的首地址,即a2地址实际上a0、a1和 a2分别表示的是二维的第0行、第1行和第2行。基于这种认识,把a0、a1和 a2看成是一维数组名,C语言又规定数组名代表数组的首地址,因此a0代表第0行一维数组中第0列元素的地址,即&a00,依此类推a1的值是&a10依此类推a2的值是&a20第0行第1列元素的地址可表示为:a0+1在一维数组中,a0和*(a+0)等价,a1和*(a+1)等价,等理解:a是二维数组的首地址 a1即*(a+1)是第二行的首地址,用地址法如何得到a01呢?它的地址表示为 a0+1,值表示为*(a0+1)进一步表
9、示为:*(*(a+0)+1)说明:对二维数组来说,ai表示的是一维数组名,ai本身不占实际的内存单元,它只是一个地址,表示地址的一种计算方法,如同一维数组x10的数组名.,2、指向多维数组的指针变量(1)指向数组元素的指针变量main()int a34=1,3,5,7,9,11,13,15,17,19,21,23;int*p;for(p=a0;pa0+12;p+)if(p-a0)%4=0)printf(“n”);printf(“%4d”,*p);,(2)指向由m个元素组成的一维数组指针变量输出二维数组任一行任一列元素的值main()int a34=1,3,5,7,9,11,13,15,17,1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 语言 重要 概念
链接地址:https://www.31ppt.com/p-5980091.html