透过指针引用数组。通过指针引用数组。

(一)引用数组元素时指针的演算

要指针变量p已针对数组中之一个要素,则p+1指为同一数组的产一个素,p-1指为同数组的上一个要素。

倚:P+1并无是大概用值+1,而是添加元素所占有的字节数。

int、float、long都是占有4独字节,char占一个字节。

(一)引用数组元素时指针的演算

倘若指针变量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

(二)*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     }

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

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.几近维数组元素地址问题

如果存在一个二维数组     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 #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 }

 

相关文章