【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*类型,也就是一级指针,那一级指针的地址就可以存放到二级指针当中

 

 

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听风吹等浪起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值