参数 存在二维数组

声明函数如下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];
}
时间: 2024-07-30 07:41:38

参数 存在二维数组的相关文章

c语言中二维数组作函数参数以及二维数组的理解

当二维数组作函数参数接受主调函数中的二维数组时,退化为一个指向数组的指针. 在此引用<c与指针>中的观点:作为函数 参数的多位数组名的穿递方式和一维数组名相同--实际传递的是个指向数组第一个元素的指针.但是,两者之间的区别在于, 多维数组的每个元素本身是另外一个数组,编译器需要知道它的维数,以便为函数形参的下标表达式进行求值.

c语言 函数返回二位数组 函数参数为二维数组

通过typedef可以简单实现.也可以直接写. 写了两个简单的矩阵操作的函数简单示例. #include <stdio.h> #include <stdlib.h> const int ROW = 3; const int COL = 4; typedef int (* mat_pointer)[COL]; mat_pointer init_mat(mat_pointer a) { for (int i = 0; i < ROW; ++i) for (int j = 0; j

C++_二维数组作为函数参数的使用方法

二维数组作为函数参数的使用方法 /*01)恒等式:ar2[r][c] == *(*(ar2+r)+c)03) ar2+r指向编号为r的元素,该元素由c个int型(或其他类型)数组成,编号从0开始02)int a[100][4]; ....   int total = sum(a,100); //在主函数中调用sum()函数,使用二维数组中的全部的数据   int total = sum(a,10); //在主函数中调用sum()函数,使用二维数组中的前十行数据   int total = sum

二维数组的运用

二维数组:二维数组可以看作是以行为主的一维数组. 例如:a[3][3]={{1,2,3},{4,5,6}.{7,8,9}}可以看做是,这个数组是由三个元素构成,每个元素又包括三个数的一维数组. 二维数组的初始化 #include <stdio.h> int main() {int p[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i=0,j=0; for (i=0;i<3;i++) {for (j=0;j<3;j++) {printf("%d

8.31 二维数组 字符串和指针

指针+1移动了相当于所指向类型的大小的字节 int *s1[100] 移动了4个字节 int (*s2)[100] 移动了400个字节 char *s3 移动了1 个字节 int *s4 移动了4个字节 ***p2如何理解? int *p0 = &i *p0  = i int **p1 = &p0 **p1 = i int ***p2 = &p1 ***p2 = i *p2 = p1的值 **p2 = p0的值 ***p2 = i的值 所以***p2就是p0的值        而p

php函数array_column如何将二维数组转为一维数组

/*** * 参数1二维数组,参数2 返回一维数组的值的键值 参数3 用参数3作为返回一维数组的键值 */ $last_names = array_column($records, 'last_name', 'first_name'); print_r($last_names);

Java实验项目二——二维数组实现九九乘法表

Program:打印乘法口诀表 (1)编写一个方法,参数(二维数组),完成将二维数组中的数据按照行列显示的工作. (2)编写一个测试方法,给出99乘法表,放入到二维数组中,调用(1)中的方法,显示乘法口诀表. Description:main方法所在类在最后给出,代码如下: 1 /* 2 *Description:定义工具类,负责初始化二维数组和打印二维数组 3 * 4 * */ 5 6 package tools; 7 8 9 public class Operate { 10 11 //初始

二维数组简介与使用

前言 本文将探讨一下关于二维数组在内存中的存储和二维数组在参数传递时的使用. 一.二维数组在内存中的存储 如果定义一个这样的二维数组int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};则其在内存中的表示可能下面这样的. 由上图可以看出,在内存中二维数组是按照行主序进行存储的,从内存的角度上看,二维数组本质就是一个一维数组.如果把二维数组的每一行看成一个整体,即看成一个数组中的一个元素,那么整个二维数组就是一个一维数组.而二维数组的名字代表二维数组

二维数组如何作为函数参数使用?(转)

如果我们需要编写一个处理二维数组的函数,那么这个函数原型应该如何声明呢? 首先,我们应该牢记:数组名被视为其地址,因此,相应的形参是一个指针.例如,假设有如下的代码: [cpp] view plaincopy int data[3][4] = { {1, 2, 3, 4}, {5, 5, 7, 8}, {9, 10, 11, 12} } int total = sum(data, 3); 那么sun函数的原型应该如何声明呢?为什么将行数3作为参数,而不将列数4作为参数呢? 我们可以这样理解:da