栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言进阶】指针进阶(数组传参、指针传参)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言进阶】指针进阶(数组传参、指针传参)

目录

1.前言

2. 一维数组传参

3.二维数组传参

4.指针传参

4.1 一级指针传参

4.2 二级指针传参


1.前言

  • 去掉变量名,就是类型
  • 数组指针的类型就是:int (*)[5] 

2. 一维数组传参

  • 第一个int arr[]:对的
  • 第二个int arr[10]:不写都是对的,写上或者写错也没毛病。但是这里的10没用,没必要写
  • 第三个int* arr:数组名是首元素地址,那地址就可以用指针来接收,数组每个元素是int类型的,所以指针用int*
  • 第四个int* arr[20]:指针数组,用指针数组接收,没问题。并且,数组大小[20]可以省略
  • 第五个int ** arr:也是对的,指针数组里面存放的是指针,数组每个元素类型是int*。而指针数组又是数组,数组名是首元素地址,也就是int*,一级指针的地址可以放到二级指针中,所以可以用二级指针

3.二维数组传参
  • 二维数组传参,如果形参也用二维数组(arr[5][5])来接收的话,列不能省略

  •  二维数组的数组名是数组第一行地址,也就是一维数组的地址,相当于&arr
  • 那么,传递参数的时候,二维数组传递的就是&arr,整个数组的地址。
  • 函数形参int* arr:❌  arr数组名,*代表arr是个指针,指向类型是int,但是我们这里是一维数组的地址
  • 函数参数int** arr:❌  二级指针存放一级指针地址,更不能存放数组的地址
  • 函数形参int* arr[5]:❌ 这个是指针数组,是个数组,但是我们传递的是数组的地址,不是传递数组
  • 函数参数int (*arr)[5] :✔ *arr是个指针,[]指向一个数组,有五个元素,每个元素类型int。我们传递的是第一行数组的地址,第一行有五个元素,每个元素int类型,完美匹配

4.指针传参

4.1 一级指针传参

  •  int* p = arr //将数组首元素的地址存放到指针p中
  •  这里相当于 p就是等于arr。因为p是指针,而arr也是指针,是首元素的地址
  • 那么函数传参arr = p 
  • 接收的时候,肯定可以用int arr[10]来接受,保证函数形参和实参的一致性
  • 而int * p = arr,那么接收的时候就可以用int * p来接收。因为就算不懂指针,函数传递实参用arr,从数学来说,arr等于int* p ,那保证函数形参和实参的一致性,形参也可以用int *p
  • 所以在打印的时候,arr[i] == p[i]

4.2 二级指针传参

  • 二级指针也可以接收指针数组的数组名传参。
  • 因为arr数组名是首元素的地址,而首元素是int*类型,也就是一级指针,那一级指针的地址就可以存放到二级指针当中

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862317.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号