澳门永利备用网址则p+1指向平等数组的下一个成分,p-1指向同一数组的上贰个因素

(一)引用数组成分时指针的演算

一旦指针变量p已针对性数组中的贰个因素,则p+1指向平等数组的下一个要素,p-1指向同一数组的上叁个元素。

附:P+1并不是粗略将值+1,而是丰富成分所占的字节数。

int、float、long都是占4个字节,char占三个字节。

(二)*p++、*(p++)、*(++P)、++(*p)、*(p–)、*(–p)之间的分别

*p++先执行*p,再针对下一成分

*(p++)和*p++一样,因为++和*是同等优先级,结合方向自右向左

*(++p)先使p++指向下一成分,在取*p

++(*p)先执行*p,然后将p指向成分的值+1

*(p–)先执行*p,然后p再自减

*(–p)则是p先自减,然后再取*p

(三)用数组名做函数参数

用变量名作为函数参数时传递的是变量的值,而用数组名做函数参数时,传递的是数组首成分地址

诸如,实现将数组中n个整数按相反顺序贮存

 1 #include<stdio.h>
 2 int main(){
 3     void inv(int x[],int n);
 4     int i,a[10]={3,7,9,11,0,6,7,5,4,2};
 5     
 6     inv(a,10);    //用数组名做参数传递的是数组首元素地址 
 7     for(i=0;i<10;i++)
 8     printf("%d",a[i]);
 9     return 0;
10     }
11     //inv函数用来交换两个数组元素 
12     void inv(int x[],int n){            // 实参把数组a的首元素地址传到形参 
13         int temp,i,j,m=(n-1)/2;
14         for(i=0;i<=m;i++){
15             j=n-1-i;
16             temp=x[i];x[i]=x[j];x[j]=temp;
17         }
18     }

(三)用数组名做函数参数

澳门永利备用网址,用变量名作为函数参数时传递的是变量的值,而用数组名做函数参数时,传递的是数组首成分地址

比如,达成将数组中n个整数按相反顺序寄放

 1 #include<stdio.h>
 2 int main(){
 3     void inv(int x[],int n);
 4     int i,a[10]={3,7,9,11,0,6,7,5,4,2};
 5     
 6     inv(a,10);    //用数组名做参数传递的是数组首元素地址 
 7     for(i=0;i<10;i++)
 8     printf("%d",a[i]);
 9     return 0;
10     }
11     //inv函数用来交换两个数组元素 
12     void inv(int x[],int n){            // 实参把数组a的首元素地址传到形参 
13         int temp,i,j,m=(n-1)/2;
14         for(i=0;i<=m;i++){
15             j=n-1-i;
16             temp=x[i];x[i]=x[j];x[j]=temp;
17         }
18     }

(二)*p++、*(p++)、*(++P)、++(*p)、*(p–)、*(–p)之间的分别

*p++先执行*p,再针对下一成分

*(p++)和*p++一样,因为++和*是一样优先级,结合方向自右向左

*(++p)先使p++指向下一成分,在取*p

++(*p)先执行*p,然后将p指向成分的值+1

*(p–)先执行*p,然后p再自减

*(–p)则是p先自减,然后再取*p

(一)援引数组成分时指针的运算

假设指针变量p已针对性数组中的一个因素,则p+1指向平等数组的下贰个要素,p-1指向同一数组的上一个成分。

附:P+1并非粗略将值+1,而是丰富成分所占的字节数。

int、float、long都以占4个字节,char占贰个字节。

(四)通过指针引用多维数组

1.多维数组成分地址难题

如若存在二个二维数组     int  a[3][4]

a+1代表的是a[1]的首成分地址,也等于率先行首成分的地点

a[0]+1代表的是第0行第三个要素的地址

*(a+0)+1代表的也是第0行第贰个要素的地点

*(*(a+0)+1)代表的是第0行第叁个元素的值

总结:

二维数组名是指向行的,一维数组名是指向列的。

在指向行的指针前面加多个*,就调换来指向列的指针    
 如:*a指向第0行第0列

在指向列的指针前边加贰个&,就调换来指向行的指针      
如:&a[0]指向第0行

经过指针引用数组,指针引用数组

(五)指向数组的指针

引进多个事例,该例子为寻觅有一门以上课程比不上格学生的任何大成

 1 #include<stdio.h>
 2 int main(){
 3     void search(float (*p)[4],int n);     //(*p)[4]是指向含有4个元素的一维数组的指针变量 
 4     float score[2][4]={{65,57,70,60},{58,87,90,81}};
 5     
 6     search(score,2);  //score与(*p)[4]要类型一致 
 7     return 0;
 8     }
 9 
10 void search(float (*p)[4],int n){
11     int i,j,flag;
12     for(j=0;j<n;j++){
13         flag=0;
14         for(i=0;i<4;i++)
15     if(*(*(p+j)+i)<60) flag=1;
16     if(flag==1){
17         for(i=0;i<4;i++){
18             printf("%5.1f",*(*(p+j)+i));
19         }
20             printf("\n");
21     }
22     }
23 }

 

(四)通过指针援用多维数组

1.多维数组成分地址难题

比方存在贰个二维数组     int  a[3][4]

a+1代表的是a[1]的首成分地址,相当于首先行首成分的地方

a[0]+1代表的是第0行第多个因素的地点

*(a+0)+1意味着的也是第0行第贰个因素的地方

*(*(a+0)+1)代表的是第0行第多个因素的值

总结:

二维数组名是指向行的,一维数组名是指向列的。

在指向行的指针前边加二个*,就转变来指向列的指针    
 如:*a指向第0行第0列

在指向列的指针前边加贰个&,就转变到指向行的指针      
如:&a[0]指向第0行

(五)指向数组的指针

引进一个例证,该例子为寻找有一门以上课程不如格学生的百分百成就

 1 #include<stdio.h>
 2 int main(){
 3     void search(float (*p)[4],int n);     //(*p)[4]是指向含有4个元素的一维数组的指针变量 
 4     float score[2][4]={{65,57,70,60},{58,87,90,81}};
 5     
 6     search(score,2);  //score与(*p)[4]要类型一致 
 7     return 0;
 8     }
 9 
10 void search(float (*p)[4],int n){
11     int i,j,flag;
12     for(j=0;j<n;j++){
13         flag=0;
14         for(i=0;i<4;i++)
15     if(*(*(p+j)+i)<60) flag=1;
16     if(flag==1){
17         for(i=0;i<4;i++){
18             printf("%5.1f",*(*(p+j)+i));
19         }
20             printf("\n");
21     }
22     }
23 }

 

http://www.bkjia.com/Cyy/1278145.htmlwww.bkjia.comtruehttp://www.bkjia.com/Cyy/1278145.htmlTechArticle通过指针引用数组,指针引用数组
(一)援引数组成分时指针的运算
假使指针变量p已针对数组中的一个成分,则p+1指向平等数组的下四个…