函数传入的是指针,为什么不是数组?使用函数的时候为什么又是数组名,不是指针?
为什么函数getMaxOrMin在传参时,定义的是指针,而不是数组?
同时在使用该函数的时候为什么不是指针*arr1?
为什么函数getMaxOrMin在传参时,定义的是指针,而不是数组?
同时在使用该函数的时候为什么不是指针*arr1?
2020-03-23
补充楼上所说。
传参,可以传数组,传指针可以使代码更简洁。(传指针只需要传4个字节,传数组需要传sizeof(arr)个字节,在本程序中,传数据的话需要传4*sizeof(int)=16个字节)
首先,main 函数中的 int arr1[4]; 定义了一个有4个int型元素的数组,这个数组名为arr1。也可以理解为 “arr1”指向了存储了4个int型元素的空间。此时,arr1是这段空间的首地址。
接着我们定义了一个getMaxOrMin(int* arr,...),这里的int *arr,表示它接受的参数是一个int 型的指针,也可以理解为,这个函数的第一个参数,需要传入 一个 指向一段int型元素空间的 地址。
在main函数,去调用getMaxOrMin(int *arr,...)
我们希望将arr1[4]的所有元素做个比较,得到最大值,因此我们需要传入一个,可以指向整个数据的首地址。
这个可传入的首地址不唯一,arr1 ,&arr1[0]都可以。
在函数中使用*arr1完全没有问题,这是*arr1代表的是arr1[0]的数据,如果要比较其它元素。则需要使用
*arr1,*(arr1+1),*(arr1+2),*(arr1+3),对应关系如下:
*arr1 = arr[0]
*(arr1+1) = arr[1]
*(arr1+2) = arr[2]
*(arr1+3) = arr[3]
对比一下,是不是直接使用arr[0]、arr[1]、arr[2]、arr[3]更简洁一些呢?
举报