如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第十章TheCProgrammingLanguage§10.1地址和指针的概念2、另一种存取变量值的方式:间接访问”。★一个变量的地址称为该变量的“指针”。例如:地址2000是变量i的指针。★如果有一个变量专门用来存放另一变量的地址(即指针),则称该变量为“指针变量”。例如:i_pointer是一个指针变量。下面都是合法的定义:float*pointer_3;char*pointer_4;可以用赋值语句使一个指针变量指向某个变量。如:pointer_1=&i;pointer_2=&j;为了表示清楚指针变量和它所指向的变量之间的联系。程序中用‘*’号(指针运算符or间接访问运算符)表示“指向”。定义指针变量时要注意两点:10.2.2指针变量的引用对“&”和“*”(指针运算符、间接访问运算符)的说明:如果已执行语句pointer_1=&a;(1)&*pointer_1的含义是什么?“&”和“*”优先级同,右结合,故先进行*pointer_1运算,再执行&运算。即&*pointer_1与&a相同,表示变量a的地址。如果pointer_2=&*pointer_1;它的作用是将&a(a的地址)赋给pointer_2。(2)*&a的含义是什么?先做&a运算,再做*运算。即&a所指向的变量,就是变量a。*&a和*pointer_1的作用一样,都等价于变量a。即*&a与a等价。例10.2输入a和b两个整数,按先大后小的顺序输出a和b。10.2.3指针变量作为函数参数§10.2变量的指针和指向变量的指针变量§10.2变量的指针和指向变量的指针变量如果想通过函数调用得到n个改变的值,可以:1、在主调函数中设n个变量,用n个指针变量指向他们;2、然后将指针变量做实参,将这n个变量的地址传给形参;3、通过形参指针变量,改变这n个变量单元中的值;4、主调函数中就可以使用这些改变了值的变量;§10.3数组与指针10.3.2通过指针引用数组元素结论:引用一个数组元素,可以用:(1)下标法,如a[i]形式;(2)指针法,如*(a+i)或*(p+i)。其中a是数组名,p是指向数组元素的指针变量,其初值p=a。例10.5输出数组中的全部元素10.3.2通过指针引用数组元素10.3.2通过指针引用数组元素解决办法,在第二个for循环之前加一个赋值语句:p=a;使用指针变量指向数组元素时,需要注意:③指向数组元素的指针变量,可以指向数组最后一个元素以后的内存单元,虽然没有实际意义。④注意指针变量的运算。10.3.2通过指针引用数组元素10.3.3用数组名作函数参数用数组名作为函数实参时,形参本应为指针变量,为什么允许使用形参数组的形式?例10.7将数组a中n个整数按相反顺序存放#include<stdio.h>voidmain(){voidinv(intx[],intn);inti,a[10]={3,7,9,11,0,6,7,5,4,2};printf(″Theoriginalarray:\n″);for(i=0;i<10;i++)printf(″%d,″,a[i]);printf(″\n″);inv(a,10);printf(″Thearrayhasbeeninverted:\n″);for(i=0;i<10;i++)printf(″%d,″,a[i]);printf(″\n″);}voidinv(int*x,intn)/*形参x为指针变量*/{intp,temp,*i,*j,m=(n-1)/2;i=x;j=x+n-1;p=x+m;for(;i<=p;i++,j--){temp=*i;*i=*j;*j=temp;}return;}归纳起来,如有一个实参数组,想在函数中改变此数组中的元素的值,实参与形参的对应关系有以下4种情况:(2)实参用数组名,形参用指针变量。如:voidmain()voidf(int*x,intn){inta[10];{……f(a,10);}}(3)实参形参都用指针变量。例如:voidmain()voidf(int*x,intn){inta[10],*p=a;{┇┇f(p,10);}}(4)实参为指针变量,形参为数组名。如:voidmain()voidf(intx[],intn){inta[10],*p=a;{┇┇f(p,10);}}用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但多维数组的指针比一维数组的指针要复杂。我们先通过生活中的一个例子来理解在C语言中对多维数组地址的规定方式!二维数组a相当于排长,每一行即一维数组a[0]、a[1]、a[2]相当于班长,每一个元素相当于战士。排长从第0班的