1、指针1一、指针、指针变量 二、指针与数组1、 指向数组元素的指针int a10;int *p;可以赋值为: p=&a0 或者 p=a2、 通过指针引用数组元素如果p的初值为&a0,则:(1) p+i 和a+i 就是ai的地址,或者说,它们指向a数组的第i个元素。(2) *(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即ai。(3) 指向数组的指针变量也可以带下标,如pi与*(p+i)。a 下标法。如ai形式。b 指针法。如*(a+i)或者*(p+i)。输出数组中的全部元素。(1) 下标法: #include void main() int a10; int i; for(i=0;i
2、10;i+) scanf(“%d”,&ai); printf(“n”); for(i=0;i10;i+) printf(“%d”,ai); printf(“n”);(2)通过数组名计算数组元素地址,找出元素的值。#include void main() int a10; int i; for(i=0;i10;i+) scanf(“%d”,&ai); printf(“n”); for(i=0;i10;i+) printf(“%d”,*(a+i); printf(“n”);(3)用指针变量指向数组元素。#include void main() int a10; int i,*p; for(i=0;
3、i10;i+)scanf(“%d”,&ai); printf(“n”); for(p=a;p(a+10);p+) printf(“%d”,*p); printf(“n”); 通过指针变量输出a数组的10个元素。 #include void main() int a10,i,*p; p=a; for(i=0;i10;i+)scanf(“%d”,p+); printf(“n”); for(i=0;i10;i+,p+) printf(“%d”,*p); printf(“n”);观察结果对否?三、 用数组名作函数参数例:将数组a中n个整数按相反顺序存放。#include void main()void
4、 inv(int x,int n)int i,a10=3,7,9,11,0,6,7,5,4,2printf(“the original array:n”);for(i=0;i10;i+) printf(“%d,”,ai);printf(“n”);inv(a,10);printf(“the array has been inverted:n”); for(i=0;i10;i+) printf(“%d,”,ai);printf(“n”);void inv(int x,int n) int temp,i,j,m=(n-1)/2;for(i=0;i=m;i+) j=n-1-i;temp=xi; xi=
5、xj;xj=temp;return;或者:void inv(int *x,int n) int *p,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种:(1) 形参和实参都用数组名。(2) 实参用数组名,形参用指针变量。(3) 实参形参都用指针变量。(4) 实参为指针变量,形参为数组名。四、 指针与多维数组 定义: int a34; 可以把它看成3个元素(a0,a1,a2)的一维数组,但每个元素又是一个含有4个元素的一
6、维数组。二维数组的数组名是二维数组的0行首地址;如a+1是跳过一行而不是一个元素。行指针:加1跳过一行的指针;指向一整行。列指针:加1跳一个元素的指针;指向一个元素,并且只有列指针才能指向元素。 二维数组数组名是一个行指针。若a是一个二维数组,则有:(1) a+i是行指针,指向行号为i的一整行,若对它加1则指到下一行;(2) *(a+i)和ai相同,都是一个列指针即指向的是一个元素,若对它们加1则指到下一个元素。即ai0的地址。(3) *(a+i)+j和ai+j相同,都是元素aij的地址,即与&aij等价。(4) *(*(a+i)+j)、*(ai+j)、(*(a+i)j和aij相同,都表示元素
7、aij本身。例:用指针变量输出二维数组元素的值:int a34;int *p;for(p=a0;p=0&*p=9) k= (2) +*p-0; +i; (3) ;return k;2.本函数输入n(1000)个整数到指定数组,求该数组中最大元素的值和此元素的下标,最大元素值以函数值返回,此元素的下标通过指针形参带回调用处。#include #define MAXLINE 1000int maxindex(int a,int *index)int i,n;do print(”please input nn”);scanf(”%d”,&ai); while ( );for(i=0;in;i+)scanf(”%d”,&ai);*index=0;for(i=1;in;i+) if( ) *index=i;return ;3.写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1