精华内容
下载资源
问答
  • 方法的参数是二维数组 public class ArrayTest { public static void main(String[] args) { //二维数组 int [] [] a ={{65,76,2,12},{23,45,5},{12,23,4}}; Array(a); } public static void Array(int[][] ...

    方法的参数是二维数组

    public class ArrayTest {
        public static void main(String[] args) {
            //二维数组
            int [] [] a ={{65,76,2,12},{23,45,5},{12,23,4}};
                Array(a);
    
        }
    
        public static void Array(int[][] a){
            for (int i = 0; i <a.length ; i++) {//负责纵向3层
                for (int j = 0; j <a[i].length ; j++) {//负责横向
                    System.out.print(a[i][j]+" ");
               }
                     System.out.println();
            }
        }
    }
    
    展开全文
  • 代码如下: #include int main(int argc, char *argv[]) { int arg; for(arg = 0; arg ;arg++ ) ... if(argv[arg][0] == '-') printf("option : %s\n", argv[arg]+1);... printf("argument %d: %s\n",arg ,argv...
  • 参数传递二维数组

    2017-03-30 20:25:59
     今天在论坛上有朋友提问:声明函数如下void function(int** pInt),意图参数传递一个二维数组。于是就定义了一个二维数组,比如 int[1][1],然后调用函数。结果如何?当然失败了,编译器提示:cannot ...

                                                                       参数传递二维数组 


    转自点击打开链接

          今天在论坛上有朋友提问:声明函数如下void function(int** pInt),意图是想参数传递一个二维数组。于是就定义了一个二维数组,比如 int[1][1],然后调用函数。结果如何?当然是失败了,编译器提示:cannot convert parameter 1 from 'int [1][1]' to 'int **',参数类型不匹配。上述过程我自己也试了,当然不匹配,类型完全不一样嘛。然后我就想了:如果要将一个二维数组作为形参,那么函数该怎么声明?

     

          来看《C++ Primer》中给出的方法:

    • 数组名作为形参

    [cpp] view plain copy
    1. void func1(int iArray[][10])  
    2. {  
    3.   
    4. }  
    5.   
    6.   
    7.   
    8. int main()  
    9. {  
    10.     int array[10][10];  
    11.     func1(array);  
    12.   
    13. }  

    编译通过,注意形参声明一定要给出第二个维度的大小,要不编译不过。

    • 一维数组指针作为形参

    [cpp] view plain copy
    1. void func2(int (*pArray)[10])  
    2. {  
    3.   
    4. }  
    5.   
    6. void func2_1(int (*pArray)[]) //编译通过,无法调用  
    7. {  
    8.   
    9. }  
    10.   
    11. int main()  
    12. {  
    13.     int array[10][10];  
    14.     func2(array);  
    15. }  

    其实二维数组名就是一个指向一维数组的指针,所以这种声明方式OK。必须指定一维数组的长度,如果没有指定的话,函数声明编译通过。但是如果一旦有调用代码,就有编译不通过,因为没有实参类型能匹配int[].

    • 二维数组引用作为形参

    [cpp] view plain copy
    1. void func3(int (&pArray)[10][10])  
    2. {  
    3.   
    4. }  
    5.   
    6. int main()  
    7. {  
    8.     int array[10][10];  
    9.     func3(array);  
    10. }  

    必须指定两个维度的长度。

    • 二维数组指针作为形参

    [cpp] view plain copy
    1. void func4(int (*pArray)[10][10])  
    2. {  
    3.   
    4. }  
    5.   
    6. int main()  
    7. {  
    8.     int array[10][10];  
    9.     func4(&array);  
    10.   
    11. }  

    必须指定两个维度的长度。

     

    以上方法都可以等价使用,对数组来说,没有值传递。

          还不满足,还有其他的声明方式吗?回到本文开始提到的问题:可以用双重指针int**作为形参,接受二维数组实参吗?答案是肯定的,但是又局限性。用双重指针作为形参,那么相应的实参也要是一个双重指针。事实上,这个双重指针其实指向一个元素是指针的数组,双重指针的声明方式,很适合传递动态创建的二维数组。怎么动态创建一个二维数组?如下程序:

     

     

    [cpp] view plain copy
    1. int main()  
    2. {  
    3.     int m = 10;  
    4.     int n = 10;  
    5.     int** p = new int[m][n];  
    6. }  

     

    会发现编译不通过,第二个维度长度必须为常量。那么怎么声明一个两个维度都能动态指定的二维数组呢?看下面:

     

     

    [cpp] view plain copy
    1. void func5(int** pArray, int m, int n)  
    2. {  
    3.   
    4. }  
    5.   
    6. #include <ctime>  
    7. int main()  
    8. {  
    9.     int m = 10;  
    10.     int n = 10;  
    11.   
    12.     int** pArray = new int* [m];  
    13.     pArray[0] = new int[m * n]; // 分配连续内存  
    14.   
    15.     // 用pArray[1][0]无法寻址,还需指定下标寻址方式  
    16.     for(int i = 1; i < m; i++)  
    17.     {  
    18.         pArray[i] = pArray[i-1] + n;  
    19.     }  
    20.   
    21.     func5(pArray, m, n);  
    22. }  
       

     

    这里为二维数组申请了一段连续的内存,然后给每一个元素指定寻址方式(也可以为每一个元素分别申请内存,就不必指定寻址方式了),最后将双重指针作为实参传递给func5。这里func5多了两个形参,是二维数组的维度,也可以不声明这两个形参,但是为了安全嘛,还是指定的好。最后编译,运行,一切OK。总结一下,上面的代码其实是实现了参数传递动态创建的二维数组。

    10
    展开全文
  • 参数 存在二维数组

    2017-09-11 16:18:00
    声明函数如下void function(int** p),意图参数传递一个二维数组。于是就定义了一个二维数组,比如 int a[1][1],然后调用函数。结果如何?当然失败了,编译器提示:cannot convert parameter 1 from 'int [1]...

    声明函数如下void function(int** p),意图是想参数传递一个二维数组。于是就定义了一个二维数组,比如 int a[1][1],然后调用函数。结果如何?当然是失败了,编译器提示:cannot convert parameter 1 from 'int [1][1]' to 'int **',参数类型不匹配。上述过程我自己也试了,当然不匹配,类型完全不一样嘛。然后我就想了:如果要将一个二维数组作为形参,那么函数该怎么声明?

    简单点

    数组名作为形参

    void func1(int Array[][10])
    {
    
    }
    
    int main()
    {
        int array[10][10];
        func1(array);
    }

    编译通过,注意形参声明一定要给出第二个维度的大小,要不编译不过。

     

    一维数组指针作为形参

    void func2(int (*pArray)[10])
    {
    
    }
    
    void func2_1(int (*pArray)[]) //编译通过,无法调用,第二维没有给出
    {
    
    }
    
    int main()
    {
        int array[10][10];
        func2(array);
    }

    其实二维数组名就是一个指向一维数组的指针,所以这种声明方式OK。必须指定一维数组的长度,如果没有指定的话,函数声明编译通过。但是如果一旦有调用代码,就有编译不通过,因为没有实参类型能匹配int[].

     

    二维数组引用作为形参

    void func3(int (&pArray)[10][10])
    {
    
    }
    
    int main()
    {
        int array[10][10];
        func3(array);
    }

    必须指定两个维度的长度。

     

    二维数组指针作为形参

    void func4(int (*pArray)[10][10])
    {
    
    }
    
    int main()
    {
        int array[10][10];
        func4(&array);
    }

    必须指定两个维度的长度

     

    回到本文开始提到的问题:可以用双重指针int**作为形参,接受二维数组实参吗?答案是肯定的,但是又局限性。用双重指针作为形参,那么相应的实参也要是一个双重指针。事实上,这个双重指针其实指向一个元素是指针的数组,双重指针的声明方式,很适合传递动态(即维数是变量)创建的二维数组。怎么动态创建一个二维数组?如下程序:

    void func5(int** pArray, int n) 
    {  
    
    }  
    
    int main()
    {
         int n=10;
        int **a=new int *[n];
         for(int i=0;i<n;i++)
            a[i]=new int[n];
    }

     

    转载于:https://www.cnblogs.com/home123/p/7505501.html

    展开全文
  • 当把二维数组作为参数传递的时候很多人可能一上来就这样写intfun(int **matrix),这样写没有区分“指向整型指针的指针”与“指向整型数组的指针”的区别。 这样传参错的,因为matrix二维数组,matrix[100...

    刚才在百度知道看到了这个问题,回答了下,这个问题很好,总结一下。

    声明一个二维数组

    int matrix[100][100];

    当把二维数组作为参数传递的时候很多人可能一上来就这样写intfun(int  **matrix),这样写是没有区分“指向整型指针的指针”与“指向整型数组的指针”的区别。

    这样传参是错的,因为matrix是个二维数组,matrix[100][100]是个二维数组即数组的数组。也就是说,matrix是什么呢,matrix是一个数组,是一个有100个元素的数组,只不过它的每个元素是一个整型数组,而不是整型数。这也是为什么要记住“指向整型指针的指针”与“指向整型数组的指针”是不同的。
    因为指针运算,所以你在传参时必须指定matrix中每个元素指向的数组的大小,要不然没法进行指针运算,i*n+j,也就是说,你要说明那个n是多少,要不然瞎乘一个数,肯定会出错。
    所以作为参数的二维数组应该这样写int (*matrix)[100],注意那个圆括号不要落下,要是落下了,因为[]的优先级高于*,所以matrix就成了“指向整型指针的指针“了。
    所以正确的函数参数应该这样写:int fun(int (*matrix)[100]),调用时写成fun(matrix)就好啦!
    
    
    然后你可能有个疑问,为什么一维数组参数可以写成int fun(int *A)呢,因为它和A[n]的A含义相同,都是指向整型数的指针。

    展开全文
  • VB里怎么将二维数组作为byval形参数传递?二维数组可以函数的可选参数么?
  • C语言指针重点难点整理(详解)(包括一维数组,二维数组的元素指针,二维数组的行指针做函数参数,指针数组,行指针数组) 笔者学指针之前: 呵呵,听闻指针C语言的难点,我倒要见识一下,到底有多难 笔者学完...
  • 版本php 5.21.一维数组://获取数据zval **data;HashTable *arr_hash;HashPosition pointer;int array_count;arr_hash = Z_ARRVAL_P(uinlist);for(zend_hash_internal_pointer_reset_ex(arr_hash, &pointer);...
  • 参数传递二维数组 .

    2013-09-11 13:12:00
    今天在论坛上有朋友提问:声明函数如下void function(int** pInt),意图参数传递一个二维数组。于是就定义了一个二维数组,比如 int[1][1],然后调用函数。结果如何?当然失败了,编译器提示:cannot ...
  • 可变参数 二维数组

    2020-02-19 22:43:30
    一. 可变参数 Jdk1.5后增加的内容 语法:在方法声明时可以使用可变参数接受多个值 可变参数要定义在参数列表的最后一位 使用的时候把它当成...二. 二维数组 元素一维数组的数组 长度一维数组的个数 语法:数...
  • 二维数组的数组名作为函数的参数,向被调函数传递数组的起始地址,可以向函数复制全部数组元素所需的开销。与函数形参被声明为一维数组时所不同的当形参被定义为二维数组的时候,不能省略数组第二维的长度,仅...
  • 题目描述:在一个二维数组中...2.我们在这个二维数组中查找7这个元素,首先从右上角开始找,显然,右上角的9大于7的,那么就说明9这一列肯定就都大于7的,我们就可以把这一列去除掉: 3.再比较剩下的,找右上角...
  • 检查网络连通性的命令什么_常见问题解析检查网络连通性的命令...因为二维数组存储的时候“先行后列”, 如果不指定列数,就不能知道一行放几个数据,只要知道了列数,排头就可以知道一共能放多少行。 二维数组可...
  • 二维数组参数

    千次阅读 2014-04-22 09:23:26
    今天看到了二维数组如何...1:参数是二维数组 int array[10][10]; void passFunc(int a[][10]) { // ... } passFunc(array); 2:参数是一个包含指针的数组 int *array[10]; for(int i = 0; i ; i++) array[i] = ne
  • 指针变量作为函数参数 如果想在函数内部修改外部变量的值,就需要传递外部变量的地址(以指针变量作为函数的参数) 在函数内部更改指针变量的...二维数组作为函数形参会被优化为数组指针(二维数组的元素数组) ...
  • Java数组1.数组的概述容器的概念2.数组的定义格式方式一方式二方式三3.数组元素的默认值4.什么数组初始化5....二维数组二维数组概述二维数组定义格式方式一方式二方式三二维数组内存图二维数组...
  • 今天写一个在二维数组中查找某个数的程序,题目如下: /* 在一个二维数组中,每一行都按照从左到右的一次递增的顺排序,每一列按照从上到下依次递增顺序排序。完成这样的一个函数,输入一个二维数组和一个整数,判断...
  • 先说一下退化这个概念,退化出现在数组的引用过程中,当数组作为参数时会退化为指针,很好理解,在一定程度上,数组名可以等同于指针(一维数组)。 C语言中,数组名作为参数传递给函数时,数组退化为指针,实际上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,485
精华内容 994
关键字:

参数是二维数组