• 【整理】数组与指针


    1.数组与函数参数

    (1)一维数组  P180

    1 int s[10];
    2 void sort(int a[],int n);
    3 sort(s,10);

     (2)二维数组或多维数组  P185

    1 int fun(int a[3][10]);  //正确
    2 int fun(int a[][10]);  //正确,第二维以及其他高维不能省略
    3 int fun(int a[3][]);  //错误

     2.数组与指针

    (1)一维数组  P204

    1 int a[5];    //定义指向int型数据的指针
    2 int *pi;    
    3 pi=a;
    4 int (*pa)[5];//定义指向含有5个int型数据的数组的指针,数组指针
    5 pa=&a;

         ps:其中第2行和第3行,等价于int *pi=&a[0];等价于int *pi=a;

      因为数组名代表数组的首地址,即第一个数据的地址,即a等价于&a[0],P201

      举例:

      a[3]=10; 等价于 *(pi+3)=10; 等价于 pi[3]=10; 等价于 (*pa)[3]=10;

    (2)二维数组或多维数组  P204-205

     1 int a[3][4],*pa;
     2 int (*pb)[4],i;
     3 //列指针,pa++从a[0][0]到a[0][1]
     4 pa=&a[0][0];     //等价于pa=a[0];因为a[0][0]是a[0]数组的首地址
     5 //行指针,pb++从a[0]数组指向a[1]数组
     6 pb=&a[0];         //等价于pb=a;因为a[0]是a数组的首地址
     7 for(i=0;i<12;i++)
     8     *pa++=i;      //遍历12个元素,优先级++大于*(取值)
     9 for(i=0;i<3;i++)
    10     (*pb++)[i]=(i+1)*(i+1);      //仅访问a[0][0],a[1][1],a[2][2]

      3.数组指针  P205

    1 int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    2 int (*p)[4];
    3 int i,j;
    4 p=a;
    5 for(i=0;i<3;i++)
    6 {
    7     for(j=0;j<4;j++)
    8         printf("%2d",*(*(p+i)+j));     //遍历每个元素     
    9 }

      小结:

      a[i][j] 等价于 *(*(a+i)+j) 等价于 *(a[i]+j) 等价于 p[i][j]

    ——部分来自向艳编著《C语言程序设计》

  • 相关阅读:
    学习canvas过程中的小菜鸟
    小菜鸟谈html语义化
    mui常用方法
    mui的侧滑菜单如何禁用手势侧滑
    ajax 传递数组参数
    LNMP状态管理命令
    LNMP相关软件目录及文件位置
    ubuntu常用命令
    Ubuntu设置允许root用户登录
    linux一键安装web环境(sh-1.3.0)
  • 原文地址:https://www.cnblogs.com/engraver-lxw/p/7141497.html
Copyright © 2020-2023  润新知