C语言函数
函数
int a =10;
int* pa = &a; pa表示指针变量
*pa 解引用操作
// 简单来说就指针指向的地址的值取到
-######################
// 交换函数,此时并不能交换,因为这两个值会重新开辟空间
// 所以相当于x,y交换,a,b并没有交换,因此引出指正变量
//void Swap(int x,int y){
// int temp;
// temp = x;
// x = y;
// y = temp;
//}
void Swap(int *pa,int *pb) { // 此时地址不变,值被交换
int temp = 0;
temp = *pa;
*pa = *pb;
*pb = temp;
}
int main() {
int a = 20;
int b = 10;
printf("a=%d b=%d\n",a,b);
// Swap(a,b);
Swap(&a,&b);
printf("a=%d b=%d\n",a,b);
return 0;
}
形参实例化之后相当于实参的一份临时拷贝,第一次交换失败,其实就是这个道理,就是拷贝了一份,拷贝的那份改变了,实际的并没有改变
int bin(int arr[],int *pa,int sz) { // 记得要定义数据类型
int left = 0;
int right = sz - 1;
while (left<=right) {
int mid = (right + left)/2;
if (arr[mid] > *pa) {
right = mid - 1;
} else if (arr[mid] < *pa) {
left = mid + 1;
} else {
return mid;
}
}
return -1;
}
// 编写一个函数二分查找
int main() {
int arr[] = {1,3,6,7,8,9,10};
int k = 0;
int* pa = &k;
scanf("%d",pa);
int sz = sizeof(arr)/sizeof(arr[0]);
// bin(arr,k,sz); // 为啥这类需要传入数组的长度,而不是定义的函数中求
// 因为,数组的地址是默认第一个数组的值,所以,如果下面不求的话
// 上面sizeof求的就是地址,而地址的长度是32位的4,和64位的8
// 而sizeof(arr【0】)求的是字节长度,整型是四个字节,因此求的长度不对,只有下面求咯
int ret = bin(arr,pa,sz);
if( ret == -1){
printf("没有找到所要查找的数\n");
} else{
printf("找到了,索引为%d\n",ret);
}
return 0;
}
查看11道真题和解析


顺丰集团工作强度 342人发布