调用子函数传递数组的问题

今天学习C语言时,主函数调用子函数,需要传递一个数组到子函数中,发现传递不过去,单布后返现其实传递过去的只是数组第一个元素的地址。下面看看程序:

 这个程序我想要数组元素的个数,结果得到的却是0,所以说,调用子函数时,如果想要传递数组的元素个数时,要提前在主函数中算好了,不要想着把数组传过去,结果会和预想的结果不一样的。原因是传递的不是数组本身,而是一个数组元素的一个地址而已。下面是更改后的正确代码:

这个程序主要的功能是利用二分法在一个有序数组中查找一个数。

#include"stdio.h"

int chazhao(int arr[], int key, int sz) {
	int left = 0;
	int right = sz-1;
	while (left <= right) {
		int mid = (left + right) / 2;
		if (arr[mid] > key) {
			right = mid - 1;
		}
		else if (arr[mid] < key) {
			left = mid + 1;
		}
		else
			return mid;
	}
	return -1;
}

int main() {
	int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
	int key = 3;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int a = chazhao(arr, key, sz);
	if (a != -1) {
		printf("key=%d的下标是:%d", key, a);
	}
	else {
		printf("找不到");
	}

	return 0;
}

数组名是什么?

数组名是首元素的地址
但是有两个例外:
1、sizeof(数组名)---数组名表示整个数组--计算的是整个数组的大小单位是字节
2、&数组名---数组名表示整个数组--取地址取出的是整个数组的地址。

下面的例子可以证明sizeof(arr)中的arr代表的是整个数组

 下面的例子可以证明取地址数组名中的数组名代表的是整个数组。

&arr到&arr+1    用了14个字节,一个整型元素只用4个字节,这里却用了14个字节,足以说明&arr代表的是整个数组了。

猜你喜欢

转载自blog.csdn.net/xingyuncao520025/article/details/130788585