zoukankan      html  css  js  c++  java
  • 二维数组函数参数传递 –转

    如果我们需要编写一个处理二维数组的函数,那么这个函数原型应该如何声明呢?

    首先,我们应该牢记:数组名被视为其地址,因此,相应的形参是一个指针。例如,假设有如下的代码:

    1. int data[3][4] = { {1, 2, 3, 4}, {5, 5, 7, 8}, {9, 10, 11, 12} }  
    2. int total = sum(data, 3);  

    那么sun函数的原型应该如何声明呢?为什么将行数3作为参数,而不将列数4作为参数呢?

     

    我们可以这样理解:data 是一个数组名,该数组有3个元素。而这3个元素本身都是又4个 int 组成的数组。因此 data 的类型是 指向由4个int组成的数组的指针。

    因此正确的 sum 原型如下:

    1. int sum( int (*arr) [4], int size);  
    2. //其中的括号是必不可少的,因为下面的声明将声明一个由四个指向int的指针组成的数组,而不是一个指向由4个int组成的数组的指针。   
    3. int *arr[4];   //声明了一个指针数组,这个数组包含4个int指针变量  
    4. int (*arr)[4] //声明了一个指针变量,这个指针指向由4个int组成的数组, 这个实际上等于int arr[][4].  


    还有另外一种声明格式,含义与上述正确原型完全相同,但是可读性更强:

    1. int sum(int arr[][4], int size);
    2. int sum(int (*arr)[4], int size  

    上述两个表达式实际上是相同的.
    上述2个原型都指出,arr 是指针而不是数组。还需要注意的是:int arr [ ] [4] 的含义就是: arr 是指向由4个 int 构成的数组的指针。因此,指针类型指定了列数,也就是说:函数形参已经确定了实参数组的列数,这就是为什么没有将列数作为独立的函数参数进行传递的原因

     

     

  • 相关阅读:
    ado 查询文件数据库
    S60平台简体汉字处理浅谈转symbian wiki
    symbian在收件箱创建短信(转)
    symbian得到收件箱中未读短信的数目
    enable marquee with the animated in the ListBox
    如何为Series60绘制一个常驻顶端的提示图标 [symbian]
    Symbian 得到左右软键项(CBA)的内容
    asp.net 中如何请求一个其它网站的页面
    使S60程序全屏运行,fullscreen
    symbian程序在后台运行
  • 原文地址:https://www.cnblogs.com/terrytian88/p/6039730.html
Copyright © 2011-2022 走看看