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

2023-12-16 11:02:06

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行第一个元素的地址

文章来源:https://blog.csdn.net/weixin_40933653/article/details/126382610
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。