当你搜到笔者此篇博客,或者在偶然间看见笔者此篇博客时候,你或许已经成功学会了数组及初步了解了指针,当你怀着好奇心来跟着笔者的博客走起来的时候,就会发现,哦!原来:数组传参,指针传参竟然还能这样用!!

下面请跟着笔者来欣赏一下:此篇博客对于数组传参与指针传参的理解!请紧跟笔者思路哟!拨乱反正!回归大梁!!

讲解的主要内容:

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步讲解一维数组传参与二维数组传参相关推荐

  1. 01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目

    (二)01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目 //有N件物品和一个容量为V的背包.第i件物品的体积是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. ...

  2. oracle 一维数转二维数组,js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  3. c语言定二维义数组,C语言二维数组超细讲解

    用一维数组处理二维表格,实际是可行的,但是会很复杂,特别是遇到二维表格的输入.处理和输出. 在你绞尽脑汁的时候,二维数组(一维数组的大哥)像电视剧里救美的英雄一样显现在你的面前,初识数组的朋友们还等什 ...

  4. c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  5. 【C 语言】数组 ( 一维数组形参退化 | 二维数组形参退化 | 函数形参等价关系 )

    文章目录 一.一维数组形参退化 二.二维数组形参退化 三.数组形参等价关系 一.一维数组形参退化 C 中将 一维数组 作为参数 , 传递到函数中 , 该 一维数组 会退化为 指针 ; 将 int ar ...

  6. 【C 语言】数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )

    文章目录 一.验证二维数组内存是线性的 1.打印二维数组 2.以一维数组方式打印二维数组 3.打印二维数组值和地址 二.完整代码示例 一.验证二维数组内存是线性的 验证二维数组内存是线性的 : 验证方 ...

  7. 一维数组名与二维数组名的关联

    1.一维数组名与二维数组名的关系之于普通指针与数组指针的关系 2.首先数组名编译器会隐式变换看做指针常量,因此a[i]与a+i是等价的. a+i返回由i指定的行地址,假设元素类型为char,则行指针类 ...

  8. 2022. 将一维数组转变成二维数组

    2022. 将一维数组转变成二维数组 给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n .你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组 ...

  9. 一维数组转化为二维数组(java)

    由于经常在使用矩阵进行计算时,会首先将一维数组转为二维数组.因此,在这里记录一下,也希望对他人有帮助. package deal; /** author:合肥工业大学 管院学院 钱洋 *1563178 ...

  10. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

    如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) {echo '是一维数组'; ...

最新文章

  1. 2010 模板下载 罗斯文_俄罗斯签证办理攻略
  2. iOS屏幕适配方案-Auto Layout
  3. python1乘到10_python写一个循环1+到10打印计算步骤的脚本——纯粹无聊玩的
  4. 《C++ primer》--第11章
  5. C语言课后习题(40)
  6. 求翻转数循环结构C语言,[LeetCode Easy题快一起刷起来] 1. 两数之和 7. 整数翻转
  7. 51CTO下载“开心辞典” 实现你的下载豆梦想【已结束】
  8. R Markdown 简介
  9. oracle关闭和,ORACLE启动和关闭
  10. YT88 USB 加密狗 使用方法(一)加壳
  11. 一维非齐次热传导方程的紧致差分格式(附Matlab代码)
  12. Pyhton语音播放
  13. Windows10(64位)下安装MySql5.7
  14. 可逆矩阵性质总结_逆矩阵的定义与性质.doc
  15. C语言的函数到底是什么
  16. 【面试】 CVTE 视源股份 C++ 软件开发 二面
  17. 分层测试(Layered Testing Approach)
  18. Java类和对象的特征
  19. zookeeper入门到实战-阶段二(常用命令的使用)
  20. qml+opencv3.1简单打开摄像头,关闭摄像头

热门文章

  1. 如何用 React 完成图片上传功能
  2. RocketMQ(消息中间件)
  3. 解决win10桌面无法删除ie浏览器图标
  4. windows系统重装步骤
  5. R语言plotly可视化:使用plotly可视化模型预测概率值的直方图、使用分类标签为阴性和阳性样本预测概率直方图进行颜色区分(prediction probability histogram)
  6. EasyAR4.0稀疏空间地图室内导航
  7. VSCode中使用GitHub
  8. php codeigniter 语言,CodeIgniter多语言实现方法详解
  9. SLA、BFD、NQA、ACl 笔记
  10. Nagios基本介绍