• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C++笔记 二维数组作为函数的参数 三种传参的方法 注意要点

武飞扬头像
Love coldplay
帮助1

1、C/C 二维数组作为函数的参数
//二维数组作为函数的参数,一般只有三种写法


//void array_print(int array[2][2])

函数的参数声明必须指明数组的列数,数组的行数没有太大关系,因为函数调用时传递的是一个指针,它指向由行向量构成的一维数组
//void array_print(int array[][2])

这种形式的函数参数是一个指针,它指向具有两个元素的一维数组

//void array_print(int(*array)[2])
2、不合法写法总结

//不合法写法

//void array_print(int array[][])
//void array_print(int array[2][])//没有指定列数,只是指定了行数
//void array_print(int *array[2])//相当于声明了一个数组,该数组具有2个元素,其中每个元素都是一个指向整型对象的指针,说白了,就是两个行指针
3、测试案例
3.1 传参方式1
// 函数参数-----> 使用数组下标符号"[]"传递二维数组
void array_print1(int array[][3])
{

	cout << array[0][1] << endl;//第1行第2列的数据
}

3.2 传参方式2

//函数参数 ---->使用行指针来将二维数组传为函数的参数
void array_print(int (*array)[3])//这种形式的函数参数是一个指针,它指向具有三个元素的一维数组
{
	

	cout << array[0][1] << endl;第1行第2列的数据

}

3.3 传参方式3
void array_print2(int array[2][3])
{
	cout << array[0][1] << endl;//第1行第2列的数据

}

总代码

#include<iostream>
using namespace std;

void test01()
{

	int a[5] = { 1,2,3,4 };
	cout << "一维数组名           " << a << endl;
	cout << "数组名所指向的数据   " << *a << endl;
	
	int array[2][3] = { {1,100,1000},{2,200,2000} };
	int temp = 0;
	cout << "二维数组名           " << array << endl;
	cout << "第一行数据           " << array[0] << endl;
	cout << "第二行数据           " << array[1] << endl;
	temp= array[1]- array[0];
	cout << "temp=" << temp << endl;
	cout << "数组名所指向的数据   " << **array<< endl;
	
	// array[i][j]和*(*(array i) j)
	cout << "第二行第二列的数据  " << *(*(array   1) 1)<< endl;//第二行第二列的数据
	cout << "第二行第二列的数据  " << array[1][1] << endl;//第二行第二列的数据

}


// 使用行指针访问二维数组 int (*array)[3],指针array是一个有三个元素的一维数组的地址,相当于&array[0]

// 注意:先运算int[3], 再是声明指针*array,array数据类型int[3]*


// 使用行地址访问二维数组的元素
// (array   i):array表示第0行的地址,加上i,表示第i行的地址
// *(array   i):array表示第0行的地址,加上i,和上面不同,这里表示第i行第一个元素的地址
// *(array   i)   j:表示第i行的,第j个元素的地址
// (*(array   i)   j):表示array[i][j]第i行,第j个元素的值



//函数参数 ---->使用行指针来将二维数组传为函数的参数
void array_print(int (*array)[3])//这种形式的函数参数是一个指针,它指向具有三个元素的一维数组
{
	

	cout << array[0][1] << endl;第1行第2列的数据

}




// 函数参数-----> 使用数组下标符号"[]"传递二维数组
void array_print1(int array[][3])
{

	cout << array[0][1] << endl;//第1行第2列的数据
}




void array_print2(int array[2][3])
{
	cout << array[0][1] << endl;//第1行第2列的数据

}





int main()
{
	
    //test01();

	int array[2][3] = { {1,100,1000},{2,200,2000} };
	array_print(array);//函数参数-----> 使用行指针来将二维数组传为函数的参数
	array_print1(array);// 函数参数-----> 使用数组下标符号"[]"传递二维数组
	array_print2(array);

}



学新通

学新通

4、运行结果

调用函数test01()

void test01()
{

	int a[5] = { 1,2,3,4 };
	cout << "一维数组名           " << a << endl;
	cout << "数组名所指向的数据   " << *a << endl;
	
	int array[2][3] = { {1,100,1000},{2,200,2000} };
	int temp = 0;
	cout << "二维数组名           " << array << endl;
	cout << "第一行数据           " << array[0] << endl;
	cout << "第二行数据           " << array[1] << endl;
	temp= array[1]- array[0];
	cout << "temp=" << temp << endl;
	cout << "数组名所指向的数据   " << **array<< endl;
	
	// array[i][j]和*(*(array i) j)
	cout << "第二行第二列的数据  " << *(*(array   1) 1)<< endl;//第二行第二列的数据
	cout << "第二行第二列的数据  " << array[1][1] << endl;//第二行第二列的数据

}
学新通
int main()
{
	
	
	test01();


	//int array[2][3] = { {1,100,1000},{2,200,2000} };
	//array_print(array);//函数参数-----> 使用行指针来将二维数组传为函数的参数
	//array_print1(array);// 函数参数-----> 使用数组下标符号"[]"传递二维数组
	//array_print2(array);
}

学新通

查看内存
注意数据是16进制
学新通

5、总结

根据上述程序的运行结果分析:

数组名是数组首元素的地址

  1. 一维数组的元素是单个的元素,数组名就是第一个元素的地址
  2. 二维数组的元素是一维数组,数组名就是第一个元素的地址,第一个元素是一维数组,一维数组的地址就是一位数组中第一个元素的地址,所以二维数组的数组名在数值上和第一行一维数组的第一个元素的地址相同,但是实际意义不同
// (array   i):array表示第0行的地址,加上i,表示第i行的地址
// *(array   i):array表示第0行的地址,加上i,和上面不同,这里表示第i行第一个元素的地址

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfigbha
系列文章
更多 icon
同类精品
更多 icon
继续加载