zoukankan      html  css  js  c++  java
  • C++ 函数与二维数组

    int data[3][4]= {{1,2,3,4},{1,2,3,4},{1,2,3,4}};

    定义了一个三行四列的数组

    这个二维数组可以解释为:

    有3个指向数组的指针, 每个指针指向一个  数组, 每个数组包含 4 个int 元素.

    假如此时有一个sum 函数, 作用是计算这个二维数组的和

    那么调用sum函数时, 代码应为 sum( data , int size);

    那么 sum函数的原型是什么呢:

    原型如下: (原型即函数的定义)

    int sum(int (*ar2)[4] , int size );

    为什么将二维数组作为形参时, 只有第一个方括号需要用符号表示, 而第二个方括号用具体的常量表示呢?

    原因如下:

    当 代码写出int data[3][4]时,  data就会被认为是一个数组的指针, 指向一整个含有四个元素的数组.  这样的数组共有3个

    当理解了上面的这两句话之后, 就可以理解为什么sum需要这样调用了

    ar2 是一个指向数组的指针, data也是指向数组的指针, 所以调用sum函数时, 可以直接传递data作为实参  , size 就是data数组的长度, 就是3

    其中, 括号不能少, 如果少加一个括号, 变为 int *ar[4]  代码的意义将有很大的改变, 此时代码的意义为:

    只有一个数组,  这个数组的内容是  四个 int* 指针. 

    可以形象的理解为  | int* | int* | int* | int* |

    而int (*ar2)[4]  的意思为:

     | 含有四个int元素的数组 | 含有四个int元素的数组 | 含有四个int元素的数组 | 含有四个int元素的数组 |

    为了更加便于理解, 可以将int sum(int (*ar2)[4] , int size ); 改写为

    int sum(int ar2[][4] , int size );

    这样写的可读性更强. 可以轻松的理解为,  这是一个二维数组, 只是行数没有指定, 值为空, 数组名为ar2, 而数组的实际长度, 需要由size 指定. 

    但是不论哪一种写法 , 他们都有相同的意义:

     ar2是指针, 而不是数组 !

  • 相关阅读:
    iOS-25个小技巧
    iOS-UITableView的使用
    iOS-UIPickerView
    iOS-UIStoryboard和UIResponder
    javascript弹出层-DEMO001
    jQuery源码分析-02正则表达式-RegExp-常用正则表达式
    JSON动态生成树
    回顾码农历程总结2013 期待2014
    大数据量分页存储过程效率测试附代码
    关于对象序列化json 说说
  • 原文地址:https://www.cnblogs.com/derek-dhw/p/10446165.html
Copyright © 2011-2022 走看看