资源描述:
《指针是C语言的重要概念.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第十章指针指针是C语言的重要概念,是C语言的特色,是C语言的精华。10.1地址和指针的概念内存中的每一个字节都有一个地址。内存单元的地址与内存单元的内容是两个完全不同的概念。在编译时给出了变量名和地址的对应关系。以前在程序中定义整形等变量。如inta,b;表示a和b申请整形单元,分别存放两个整形值。我们也可以定义一种特殊的变量,它用来存放内存单元地址。这种变量的值是一个地址,它的作用是:根据地址去找相应的单元,因此,这种装载地址的变量又可称为“指针变量”。指针变量的值就是指针即地址。10.2变量的指针和指向变量的指针变量变量的指针就是变量的地址。存
2、放地址的变量称谓指针变量。为了表示指针变量和它所指向的变量之间联系,程序中用*符号表示“指向”如用i_point表示指针变量,而*i_point就表示i_point指向的变量。10.2.1定义一个指针变量C语言规定所有变量在使用前必须定义,指定其类型,并按此分配内存单元。inti,j;int*point1,*point2;定义了两个指向整形变量的指针变量。定义指针变量要指定“基类型”基类型是指针变量指向的变量的类型。指针变量的定义形式:基类型*指针变量名那么如何给指针变量赋值呢?point1=&i;point1=&j;10.2.2指针变量的引用指针
3、变量只能存放地址(指针),有两个有关的运算符:(1)&:取址运算符,&a(2)*:指针运算符(“间接运算符”),*pmain(){inta,b;int*point1,*point2;a=100;b=20;point1=&a;point2=&b;printf(“%d,%d”,a,b);printf(“%d,%d”,*point1,*point2);}point1=&*point2;?b=*&a;?main(){int*p1,*p2,*p,a,b;a=10;b=90;p1=&a;p2=&b;if(a
4、intf(“%d,%d”,*p1,*p2);}10.2.3指针变量作为函数参数函数参数可以是指针变量swap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}main(){inta,b,*point1,*point2;a=10;b=90;point1=&a;point2=&b;if(a
5、数组的指针是指数组的起始元素的地址.引用数组元素可用下标法,也可用指针法,即用指针指向所引用的元素.10.3.1指向数组元素的指针inta[10];int*p;p=&a[8];C语言规定数组名代表数组的首地址,也就是第0号元素的地址.下面两个句子等价:p=&a[0];p=a;10.3.2通过指针引用数组元素按C语言规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素(而不是将的p的值简单加1).如果p的初值为&a[0],则(1)p+i和a+i就是a[i]的地址(2)*(p+i)和*(a+i)是p+i和a+i所指向的数组元素
6、,即a[i]。可以看出,[]实际上是变址运算符(3)指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价.10.3.3用数组名作函数参数例:main()inv(intarr[],intn){intarray[10];{::inv(array,10);}:}用数组名作参数时,如果形参数组中各元素值发生变化,实参数组值随之变化.voidinv(intarr[],intn){intt,i,j,m=(n-1)/2;for(i=0;i<=m;i++){j=n-1-i;t=arr[i];arr[i]=arr[j];arr[j]=t;}}main(){i
7、nti,a[10]={2,4,54,6,7,3,31,56,23,65};inv(a,10);for(i=0;i<=9;i++)printf(“%d”,a[i]);}f(intarr[],intn)等价于f(int*arr,intn)例:函数定义为:函数调用为:voidswap(intx,inty)swap(a[1],a[2]);请大家注意:(1)“值传递”和“地址传递”(2)两者之间的异同点intm1,m2;voidm_value(intarray[],intn){int*p,*array_end;array_end=array+n;m1=m2=
8、*array;for(p=array+1;pm1)m1=*p;elseif(*p