C++笔记 二维数组作为函数的参数 三种传参的方法 注意要点
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、总结
根据上述程序的运行结果分析:
数组名是数组首元素的地址
- 一维数组的元素是单个的元素,数组名就是第一个元素的地址
- 二维数组的元素是一维数组,数组名就是第一个元素的地址,第一个元素是一维数组,一维数组的地址就是一位数组中第一个元素的地址,所以二维数组的数组名在数值上和第一行一维数组的第一个元素的地址相同,但是实际意义不同
// (array i):array表示第0行的地址,加上i,表示第i行的地址
// *(array i):array表示第0行的地址,加上i,和上面不同,这里表示第i行第一个元素的地址
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfigbha
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24