4步讲解一维数组传参与二维数组传参
当你搜到笔者此篇博客,或者在偶然间看见笔者此篇博客时候,你或许已经成功学会了数组及初步了解了指针,当你怀着好奇心来跟着笔者的博客走起来的时候,就会发现,哦!原来:数组传参,指针传参竟然还能这样用!!
下面请跟着笔者来欣赏一下:此篇博客对于数组传参与指针传参的理解!请紧跟笔者思路哟!拨乱反正!回归大梁!!
讲解的主要内容:
1.一维数组传参: 形参可以是数组也可以是指针!
2:二维数组传参的书写规范指正!
3.一级指针传参!
4.二级指针传参
下面笔者仍用代码+解析的方式来带领读者走进此篇博客!!!
1.一维数组传参: 形参可以是数组也可以是指针!
#include <stdio.h>
int main()
{void test1(int arr[]){ }void test2(int arr[10]){ }}
对于上述代码中,传递的形参为数组!对于test1, test2 中的数组大小可以省略!数组传参时,不会传递整个数组!因此对于数组的大小,在形参里面随便写,这个值是不会使用的!(但是建议不要随便写!万一……得不偿失!)
#include <stdio.h>
int main()
{void test3(int* arr) //形参为指针{ }void test4(int* arr[20]) //形参为数组{ } //arr[20],中的20可以省略!void test5(int** arr) //形参为指针{ }}
对于上述代码段形参,显得残次不齐!请读者仔细思考一下!
int arr[10] = { 0 };
test(arr);int* arr2[20] = { 0 };
test(arr2);
对于上述代码,笔者所讲述了,如何将数组当作指针来进行传参(数组传参时候,本质上传递的是地址)!!
对于: int* arr2[20] = { 0 }; 部分,arr 2是用来存放指针数组的(一维数组,存放整型指针的数组)
对于arr2[20]的类型解析:
显而易见的对于arr2[20]:存放了20个int * 类型的整型指针!!
2:二维数组传参的书写规范指正!
对于二维数组大多刚刚对于指针入门的读者而言,二维数组传参时候的书写规范,目前并没有系统的了解!所以笔者下面来带领大家走进对二维数组的传参书写规范!加深了解与认识!
对于二维数组传参时候,形参可以是数组,也可以是指针!!
对于形参是数组部分:
void test1(int arr[3][5]) //正确{ }void test2(int arr[][]) //错误写法{ }void test3(int arr[][5]) //正确{ }
上述代码中,test1与test3都是正确的写法!对于数组的行与列部分:行可以省略,列不能省略!对于test2是个严重错误的典范,严重不可取!!需要注意的是:test3里面的arr[][5],列的5需要与实参的数值相对应!!
对于形参是数组部分:
void test4(int* arr) //错误写法{ }void test5(int* arr[5]) //错误写法{ }void test6(int(*arr)[5]) //正确{ }void test7(int** arr) //错误写法{ }
对于上述代码中,只有test6是正确的写法,其他都是错误的写法!
对于:void test7(int** arr) 书写的是二级指针,但需要强调的是二级指针是用来接收一级指针变量的地址!而不是二维数组!
#include <stdio.h>
int main()
{int arr[3][5] = { 0 };tets(arr); //数组名是数组首元素的地址!——》二维数组第一行的地址!//实参传递的是二维数组的数组名,因此需要用上面讲解的书写规范来使用……
}
3.一级指针传参!
对于一级指针传参,想必到目前为止,大家已经有着详细的了解,所以笔者就不做过多的讲解!仅仅代码一篇,供大家思考!
#include <stdio.h>
void print(int* p, int sz) //一级指针传参,一级指针接收!
{int i = 0;for (i = 0; i < sz; i++){printf("%d ", *(p + i));}printf("\n");
}
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr;int sz = sizeof(arr) / sizeof(arr[0]);print(p, sz);//一级指针p,作为实参传递给形参!return 0;
}
代码的运行结果为:
思考一下:
当一个函数的参数部分为一级指针的时候,函数能接收什么参数???
void test(int* p) //一级指针接收
{ }
int main()
{int a = 0; test(&a); //方法1int a = 0;int* ptr = &a;test(ptr); //方法2int arr[10] = { 0 };test(arr); //方法3}
因此有着上述三种方法来实现:一个函数部分为一级指针的时候,实参的传递方法!
4.二级指针传参
对于二级指针传参,跟一级指针一样,想必到目前为止,大家已经有着详细的了解,所以笔者就不做过多的讲解!仅仅代码一篇,供大家思考!
#include <stdio.h>
void test(int** ptr)
{printf("num=%d \n", **ptr);
}
int main()
{int n = 10;int* p = &n;int** pp = &p;test(pp);test(&p); //一级指针的地址return 0;
}
代码的运行结果为:
下面疑问接着而来!
当一个函数的参数部分为二级指针的时候,函数能接收什么参数???
参考思考部分:
void test(int** p)
{ }
int main()
{int** ptr;test(ptr); //方法1int* p2;test(&p2); //方法2int* arr[10];test(arr); //方法3
}
笔者目前所知道的有着上述三种方法来实现:一个函数部分为二级指针的时候,实参的传递方法!
此篇博客到此就已经结束,耗时接近三小时打磨而来,请读者……一键三连呀!!!
4步讲解一维数组传参与二维数组传参相关推荐
- 01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目
(二)01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目 //有N件物品和一个容量为V的背包.第i件物品的体积是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. ...
- oracle 一维数转二维数组,js将一维数组转化为二维数组
遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...
- c语言定二维义数组,C语言二维数组超细讲解
用一维数组处理二维表格,实际是可行的,但是会很复杂,特别是遇到二维表格的输入.处理和输出. 在你绞尽脑汁的时候,二维数组(一维数组的大哥)像电视剧里救美的英雄一样显现在你的面前,初识数组的朋友们还等什 ...
- c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组
遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...
- 【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )
文章目录 一.一维数组形参退化 二.二维数组形参退化 三.数组形参等价关系 一.一维数组形参退化 C 中将 一维数组 作为参数 , 传递到函数中 , 该 一维数组 会退化为 指针 ; 将 int ar ...
- 【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )
文章目录 一.验证二维数组内存是线性的 1.打印二维数组 2.以一维数组方式打印二维数组 3.打印二维数组值和地址 二.完整代码示例 一.验证二维数组内存是线性的 验证二维数组内存是线性的 : 验证方 ...
- 一维数组名与二维数组名的关联
1.一维数组名与二维数组名的关系之于普通指针与数组指针的关系 2.首先数组名编译器会隐式变换看做指针常量,因此a[i]与a+i是等价的. a+i返回由i指定的行地址,假设元素类型为char,则行指针类 ...
- 2022. 将一维数组转变成二维数组
2022. 将一维数组转变成二维数组 给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n .你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组 ...
- 一维数组转化为二维数组(java)
由于经常在使用矩阵进行计算时,会首先将一维数组转为二维数组.因此,在这里记录一下,也希望对他人有帮助. package deal; /** author:合肥工业大学 管院学院 钱洋 *1563178 ...
- PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?
如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) {echo '是一维数组'; ...
最新文章
- 2010 模板下载 罗斯文_俄罗斯签证办理攻略
- iOS屏幕适配方案-Auto Layout
- python1乘到10_python写一个循环1+到10打印计算步骤的脚本——纯粹无聊玩的
- 《C++ primer》--第11章
- C语言课后习题(40)
- 求翻转数循环结构C语言,[LeetCode Easy题快一起刷起来] 1. 两数之和 7. 整数翻转
- 51CTO下载“开心辞典” 实现你的下载豆梦想【已结束】
- R Markdown 简介
- oracle关闭和,ORACLE启动和关闭
- YT88 USB 加密狗 使用方法(一)加壳
- 一维非齐次热传导方程的紧致差分格式(附Matlab代码)
- Pyhton语音播放
- Windows10(64位)下安装MySql5.7
- 可逆矩阵性质总结_逆矩阵的定义与性质.doc
- C语言的函数到底是什么
- 【面试】 CVTE 视源股份 C++ 软件开发 二面
- 分层测试(Layered Testing Approach)
- Java类和对象的特征
- zookeeper入门到实战-阶段二(常用命令的使用)
- qml+opencv3.1简单打开摄像头,关闭摄像头