• c语言 四种方法调用数组


     
      1 #include <stdio.h>
      2 /*********************************
      3 * 方法1: 第一维的长度可以不指定 *
      4 * 但必须指定第二维的长度 *
      5 *********************************/
      6 void print_a(double a[][5], int n, int m)
      7 {
      8     int i, j;
      9 
     10     for (i = 0; i < n; i++)
     11     {
     12         for (j = 0; j < m; j++)
     13         {
     14             printf("%lf    ", a[i][j]);
     15         }
     16 
     17         printf("
    ");
     18     }
     19     //printf("%d ", a[1][0]+a[2][0]);//输出3+6,
     20     //a[4][4]=a[1][0]+a[2][0]; //即验证是不是真能直接操作数组,答案是可以
     21 }
     22 /**************************************************************
     23 *方法2: int (*a)[5]是指向一个一维数组(有5个int型元素)的指针,
     24 *因为原数组每行有5个元素,故int (*a)[5]中必须为5
     25 *而*a[N]是一个指针数组,也就是一个数组,里面有N个指针
     26 *而(*a)[N]是一个指向数组的指针,也就是一个指针,指向一个含有N个元素的数组
     27 **************************************************************/
     28 void print_b(double(*a)[5], int n, int m)
     29 {
     30     int i, j;
     31 
     32     for (i = 0; i < n; i++)
     33     {
     34         for (j = 0; j < m; j++)
     35             printf("%lf    ", a[i][j]);
     36 
     37         printf("
    ");
     38     }
     39 }
     40 /***********************************
     41 *方法3: 利用数组是顺序存储的特性,
     42 * 通过降维来访问原数组!
     43 ***********************************/
     44 void print_c(double *a, int n, int m)
     45 {
     46     int i, j;
     47 
     48     for (i = 0; i < n; i++)
     49     {
     50         for (j = 0; j < m; j++)
     51             printf("%lf    ", *(a + i*m + j)); //指针的偏移
     52 
     53         printf("
    ");
     54     }
     55 }
     56 
     57 /***********************************
     58 *方法4: 利用数组指针(指向数组的指针)来访问数组,这个数
     59 组指针double (*a)[5][5]存放的是其所指向的数组的首地址,注意不是数组首元素的首地址
     60 * 通过降维来访问原数组!
     61 ***********************************/
     62 void print_d(double(*a)[5][5], int n, int m)
     63 {
     64     int i, j;
     65 
     66     for (i = 0; i < n; i++)
     67     {
     68         for (j = 0; j < m; j++)
     69             printf("%lf    ", (*a)[i][j]);
     70 
     71         printf("
    ");
     72     }
     73 }
     74 
     75 int main(void)
     76 {
     77     double a[5][5] = { { 1.0, 2.0 }, { 3.0, 4.0, 5.0 }, { 6.0 }, { 7.0 }, { 0.0, 8.0 } };
     78 
     79     printf("
    方法1:
    ");
     80     printf("输出a:%d
    ", a);
     81     print_a(a, 5, 5);// a   double (*)[1]
     82     printf("%lf ", a[1][0] + a[2][0]);//输出3+6,
     83 
     84 
     85 
     86 
     87     printf("
    方法2:
    ");
     88     printf("输出a:%s
    ", a);
     89     print_b(a, 5, 5);
     90 
     91     printf("
    方法3:
    ");
     92     printf("输出&a[0][0]:%d
    ", &a[0][0]);
     93     printf("输出&a:%d
    ", &a);
     94     printf("输出a:%d
    ", a);
     95     print_c(&a[0][0], 5, 5); //&a是会警告的,&a[0][0]才最好。。&a 是整个数组的首地址,a是数组首元素的首地址
     96 
     97     printf("
    方法4:
    ");
     98     print_d(&a, 5, 5);//&a 是整个数组的首地址
     99 
    100     getchar();
    101     return 0;
    102 }

  • 相关阅读:
    centos7中如何让网卡名不被改变
    设置git使用vim作为编辑器
    vim复制时保留原有格式
    Linux添加自定义命令方法
    从graphite中删除字段信息
    jquery图片上传新思路
    注册代码
    JQ基本和层级选择器-p9-09
    DOM对象和JQ对象相互转换
    DOM对象和JQuery对象
  • 原文地址:https://www.cnblogs.com/zhubinglong/p/5972274.html
Copyright © 2020-2023  润新知