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;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务