四时宝库

程序员的知识宝库

C++|简单理解数组作为函数参数的写法

以下是数组作为函数参数的一般写法:

通常,③也可以用一个指针*parr来表示arr[]。

下面是一个小实例,来看一下数组作为参数的具体应用。

二维数组也可以作为函数参数。

如想处理类似下面的二维数组:

int data[3][4] = {{1,2,3,4}, {9,8,7,6}, {2,4,6,8}};

以上的数组也可以写成一维的形式:

int data[3][4] = {1,2,3,4,9,8,7,6,2,4,6,8};

或:

int data[][4] = {1,2,3,4, 9,8,7,6, 2,4,6,8};

(定义和初始化同时进行时,可以略写前面的维。)

二维数组在内存中的存储其实质是一维的。你可以理解二维数组为一个数组的数组,也就是元素是数组的数组。二维数组完全可以理解为一个行列式,如上面的二维数组就是一个三行四列的数组。三行就是三个一维数组(或三个指针,每个指针表示一个一维数组)data[0]、data[1]、data[2].

data[3][4]作函数参数时可以用下面的形式进行调用:

int sum(data,3);

为什么第二个参数是3而不是4呢?data数组的元素是3个(相当于是一个一维的3个元素的数组,其元素的类型又是一个一维数组)。data这种类型可以理解为:pointer-to-array-of four-int。

二维数组作函数参数时可以用下面的原型定义:

int sum(int (*ar2)[4], int size);

表示处理一个size行4列的函数。

int (*ar2)[4]是一个数组指针。ar2是一个指针,指向一个整型的一维数组,这个一维数组的长度是4。

理解指针数组与数组指针,先要理解一个运算符优先级的问题,“[]”的优先级比“*”要高。int *ar2[4],p1 先与“[]”结合,所以先是一个数组,因为又有*的声明,所以是一个指针数组。int (*ar2)[4],()优先级高,所以表明这个声明是一个指针,然后有数组[]的修饰,表明是一个数组指针。

int sum(int (*ar2)[4], int size);也可以写成:

int sum(int ar2[][4], int size);

以下用一个小实例来理解一下:

运行后输出:

1 2 3
4 5 6

附源代码1:

#include <iostream>
const int ArSize = 8;
int sum_arr(int arr[], int n);
// use std:: instead of using directive
int main()
{
 int cookies[ArSize] = {1,2,4,8,16,32,64,128};
// some systems require preceding int with static to
// enable array initialization
 std::cout << cookies << " = array address, ";
// some systems require a type cast: unsigned (cookies)
 std::cout << sizeof cookies << " = sizeof cookies\n";
 int sum = sum_arr(cookies, ArSize);
 std::cout << "Total cookies eaten: " << sum << std::endl;
 sum = sum_arr(cookies, 3); // a lie
 std::cout << "First three eaters ate " << sum << " cookies.\n";
 sum = sum_arr(cookies + 4, 4); // another lie
 std::cout << "Last four eaters ate " << sum << " cookies.\n";
 std::cin.get();
	return 0;
}
// return the sum of an integer array
int sum_arr(int arr[], int n)
{
 int total = 0;
 std::cout << arr << " = arr, ";
// some systems require a type cast: unsigned (arr)
 std::cout << sizeof arr << " = sizeof arr\n";
 for (int i = 0; i < n; i++)
 total = total + arr[i];
 return total; 
}
/*
输出:
0012FF28 = array address, 32 = sizeof cookies
0012FF28 = arr, 4 = sizeof arr
Total cookies eaten: 255
0012FF28 = arr, 4 = sizeof arr
First three eaters ate 7 cookies.
0012FF38 = arr, 4 = sizeof arr
Last four eaters ate 240 cookies.
*/

附原代码2

#include <stdio.h>
void output( int (*pa)[3], int n )//这个函数只能输出n行3列的二维数组
{
 int i,j;
 for( i=0;i<n;i++ ){
 for( j=0;j<3;j++ )
 printf("%d ", pa[i][j] );
 printf("\n");
 }
}
void main()
{
 int a[2][3]={
 {1,2,3},
 {4,5,6}
 };
 output(a,2);
}

-End-

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接