您的位置:首页 > 其它

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

2012-03-17 22:39 197 查看
首先,void f(a[ ][ ]);是不正确的定义

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

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

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

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

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

正确的应用模式一

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: