C语言——数组传参——数组用作函数参数

数组传参是我在写快速排序时遇到的基础问题

我提出的问题如下:

  • quick_sort(array, 0, length-1) 这个array是数组名的意思吗?
  • void quick_sort(int array[],int left,int right) 那这个定义函数的时候 为什么又是指数组元素呢?

解答如下:

  1. 数组作为参数进行了传递。也就是,数组用作函数参数。
  • C语言标准规定,作为“某类型的数组”的形参应该调整为“某类型的指针”。//本质是指针
  • 在函数形参定义这个特殊情况下,编译器必须把数组形式改写成指向数组第 0 个元素的指针形式
  • 编译器只向函数传递数组的地址,而不是整个数组的拷贝
  • 这种隐式转换意味着下面三种形式的函数定义是完全等价的,举例如下:
void func(int *parr){ ...... }
void func(int arr[]){ ...... }

void func(int arr[5]){ ...... }

 

在函数内部,arr 会被转换成一个指针变量。

参数传递是一次赋值的过程,赋值也是一个表达式,函数调用时不管传递的是数组名还是数组指针,效果都是一样的,相当于给一个指针变量赋值。

精华解答

定义时的void quick_sort(int array[],int left,int right);中的形参int array[]隐式转换成了指针;

调用时的quick_sort(array, 0, length-1);的array是给指针变量赋值的过程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值