• 通过指针引用数组


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

    如果指针变量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     }

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

    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("
    ");
    21     }
    22     }
    23 }
    务实,说实话!
  • 相关阅读:
    redux-devtools的使用
    Electron-builder打包详解
    HTML JAVASCRIPT CSS 大小写敏感问题
    electron/nodejs实现调用golang函数
    基于react开发package.json的配置
    Chrome插件(扩展)开发全攻略
    Chrome插件中 popup,background,contentscript消息传递机制
    Linux 开机引导和启动过程详解
    bash 的配置文件加载顺序
    常用Electron App打包工具
  • 原文地址:https://www.cnblogs.com/xtuxiongda/p/8254191.html
Copyright © 2020-2023  润新知