`
ILoveDOUZHOU
  • 浏览: 81109 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

二维数组作为参数在函数中传递

 
阅读更多

首先,void f(a[ ][ ]);是不正确的定义

二维数据作为函数参数时,要明确指明二维数组的列数,这样编译器才能知道如何寻址。

正确的方式有: void f (a[4][6]);

void f(a[ ][6]);//二维数组的行数可以省略

另外,也不能用非常量定义二维数组作为其下标。

void f ( a[m][n]);是严重错误的;


正确的应用模式一

void func1(int iArray[ ][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);
}

正确的应用模式三(应用二维数组引用作为参数)

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);

}


注:以上四种方法通用,但是数组传递时,仅传值,对传入参数不做改变


补充:应用二重指针作为形参,传入的实参也必须是二重指针,巧妙地利用new分配内存空间,可以用非常量定义

void func5(int** pArray, int m, int n)
{

}

#include <ctime>
int main()
{
int m = 10;
int n = 10;

int** pArray = new int* [m];
pArray[0] = new int[m * n];
// 分配连续内存,动态创建二维数组

// 用pArray[1][0]无法寻址,还需指定下标寻址方式
for(int i = 1; i < m; i++)
{
pArray[i] = pArray[i-1] + n;
}

func5(pArray, m, n);
}





分享到:
评论

相关推荐

    C语言中二维数组作为函数参数来传递的三种方法

    在C语言中,二维数组作为函数参数来传递是非常常见的操作。但是,如何正确地传递二维数组作为函数参数却是许多初学者和开发者经常混淆的地方。今天,我们将详细介绍C语言中二维数组作为函数参数来传递的三种方法。 ...

    二维数组作为函数形参的两种方法

    总结,本篇文章详细介绍了在C++中如何通过指针和引用两种方法将二维数组作为函数参数。这两种方法各有优缺点,选择哪种取决于具体的应用场景和需求。在`two-dimensional array.cpp`文件中,可以看到具体的代码实现,...

    调用形参为二维数组的函数

    接下来,我们需要了解如何将这个动态创建的二维数组作为参数传递给一个接受二维数组作为形参的函数。在C/C++中,数组名在函数调用中通常被视为指向数组首元素的指针。因此,传递二维数组的行首地址可以模拟传递整个...

    JNA调用C++动态库,传入二维数组,通过C++返回二维数组,java调用C++完整案例

    在C++中,你可能需要提供一个辅助函数来处理Java传递过来的一维数组,转换为C++的二维数组格式。 此外,对于大型数据结构,考虑到性能问题,可能需要考虑使用直接内存映射(Direct Memory Mapping)或者自定义类型...

    C语言二维数组编程练习

    在二维数组编程中,我们经常需要定义函数来处理数组。函数参数可以接受数组,如`void processArray(int arr[3][4])`。这里,`arr`实际上是指向数组首元素的指针,等价于`int (*arr)[4]`,函数内部可以通过`arr[i][j]...

    c#调用c++DLL,dll有二维数组

    在C++中,创建一个二维数组函数可能如下所示: ```cpp extern "C" __declspec(dllexport) void get2DArray(int*** arr, int& rows, int& cols) { // 初始化二维数组并设置rows和cols *arr = new int*[rows]; ...

    读取二维数组所有数据_labview读取数组_

    1. **创建二维数组**: 在LabVIEW的函数选板中,找到“数值”类别,然后选择“数组”子类别。在这里,你可以找到“创建数组”VI,它可以用来创建一个指定大小的二维数组。你需要提供行数和列数作为输入,然后默认填充...

    C++动态二维数组的申请、赋值、使用、释放以及作参数示例

    动态二维数组还可以作为函数参数传递,下面的示例展示了如何定义一个接受动态二维数组作为参数的函数: ```cpp void display(int **&p, int row, int col) { for (int i = 0; i ; i++) { for (int j = 0; j ; j++...

    C/C++中多维数组指针作为函数参数传递程序

    在 `main` 函数中,我们将二维数组 `a` 作为参数传递给 `search_score` 和 `count_avg` 函数。例如,`search_score(a,0)` 就是将二维数组 `a` 的第一个元素作为参数传递给 `search_score` 函数。 在 `search_score`...

    二维数组的行列互换(函数调用实现)

    实现数组的行列互换 形参使用二维数组。函数调用使用引用传递,比较基础。

    C++二维数组编程实例.zip

    二维数组可以作为函数的参数进行传递,但需要注意的是,数组名实际上代表数组的首地址,因此传递数组时实参和形参类型应一致,如: ```cpp void printArray(int arr[3][4]) { // 打印数组代码 } int main() {...

    二维数组与二重指针(整理)

    当我们将二维数组作为参数传递给函数时,可以省略第一维的大小,但第二维大小必须明确指出,以便编译器确定每一行的长度,如 `void trans(int a[][3], int b[])`。对于更高级的使用场景,例如动态分配二维数组的内存...

    编写一个在具有m行n列的二维数组各元素中找出最大元和最小元并显示在屏幕上的函数模板,并通过主函数对它进行调用以验证其正确性。例如,可设计该函数模板的原型为:

    注意:函数模板maxMin中要处理二维数组A的m行n列的诸元素,但设计第一参数传递过来的是Type*类型的首元素指针,所以具体处理时可以按照如下的“一维数组”方式来进行(共处理m乘以n个数据 -- 也即二维数组A的m行n列...

    函数、内存、一维数组、二维数组

    在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。 重载的特点: 与返回值类型无关,只看参数列表。 重载的好处: 方便于阅读,优化了程序设计。 重载示例: //返回两个...

    使用php对二维数组按数组值进行排序

    在上述代码中,`compare_by_score()`函数接收两个数组元素作为参数,并比较它们的'score'键的值。如果第一个元素的分数小于第二个,函数返回-1,表示第一个应该排在前面;如果第一个元素的分数大于第二个,函数返回1...

    动态生成二维数组,vs2005例程

    在C++编程中,动态生成二维数组是一种常见的内存管理技巧,尤其在处理不确定大小的数据集时。本例程“动态生成二维数组,vs2005例程”着重讲解如何在Visual Studio 2005环境下创建和管理这类数据结构。下面我们将...

    json_ksort 二维数组键值排序源码

    在处理JSON数据时,有时我们需要对二维数组按照键或值进行排序,这在PHP中可以借助内置函数ksort实现。ksort函数是PHP中用于对关联数组按键进行升序排序的一个函数,但默认它只能处理一维数组。当处理二维数组时,...

Global site tag (gtag.js) - Google Analytics