C语言函数第一节

    选择打赏方式

函数是什么

具备独立性

  • 库函数:本来就有的,strcpy:字符拷贝函数,\0也会被拷贝,memset(memory set):按自己的需求更改指定字符串的内容。www.cplusplus.com,cppreference.com

IO函数,字符操作函数,内存操作函数,时间函数,数学函数,其他函数

  • 自定义函数:自己写的函数,这一点很重要

函数的基本组成

返回类型,函数名,参数,函数题(交代函数的实现)

// 函数实现两个数大小的比较
# include<stdio.h>
int get_max(int x,int y)
{
    if(x>y)
    return x; 
    else
    return y;
}
int main()
{
    int a =10;
    int b =20;
    int max = get_max(a,b);
    printf("%d",max);
    return 0;
} 

void表示返回值为空

  • 第一种交换数值的函数
//通过函数的方法交换两个数的大小
# include<stdio.h>
void swap(int x, int y)//x,y也开辟了两块独立的空间
{
    int temp = 0;
    temp = x;
    x = y;
    y = temp;
}
int main()
{
    int a = 10;//a,b开辟了两块独立的空间
    int b = 20;
    printf("a= %d b= %d\n",a,b);
    swap(a, b);
    printf("a= %d b= %d\n",a,b);
    return 0;
}
//无法实现这个功能,以为ab和xy都各自独立开辟了属于自己的内存空间,AB和xy没有联系所以无法交换数值 
  • 第二种交换数值的函数
# include<stdio.h>
void swap2(int *x, int *y)
{
    //相当于 int* x = &a;
    int temp = 0;
    temp = *x;
    *x = *y;
    *y = temp;
}
int main()
{
    int a = 10;//a,b开辟了两块独立的空间
    int b = 20;
    printf("a= %d b= %d\n",a,b);
    //调用函数
    swap2(&a, &b);//通过获取地址的方法将ab和xy联系起来
    printf("a= %d b= %d\n",a,b);
    return 0;
}
//这个方法可以输出正确答案 

形参和实参

形参

形式上的参数,函数调用完成后自动销毁,形参实列话后只是实参的一份临时拷贝。

实参

函数的调用

传值调用

传过去的是一个确定的值swap(a, b);

  • 函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参

传址调用

传过去的是一个地址swap2(&a, &b);

  • 传址是把函数外部创建的变量的内存地址传递给函数参数的一种调用函数的方式(

  • 这种传参方式可以使函数外部和函数内部建立真正的联系,函数内部可以直接操作函数外部

    写一个函数输出1000-2000之间的闰年 
# include<stdio.h>
int is_leap_year(int n)
{
    if(n%4==0 && n%100 !=0)
    {
        return 1;
    }
    else
    return 0;
}
int main()
{
    int year = 0;
    for(year = 1000; year<2000; year++)
    {
    if(1 == is_leap_year(year))
    {
        printf("%d ",year);
    }
    }
    return 0;
} 

注意:函数在设计过程中要简单,可移植

 通过二分法写一个函数找出一组有序数的指定值 
# include<stdio.h>
int binary_search(int arr[], int k, int sz)//arr是指针
{
    int left = 0;
    int right = sz - 1;
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (arr[mid] < k)
        {
            left = mid + 1;
        }
        else if (arr[mid] > k)
        {
            right = mid - 1;
        }

        else if (arr[mid] == k)
        {
            return mid;
        }   
    }
    return -1;
}
int main()
{
    int k = 0;
    int ret = 0;
    printf("请输入需要查找的数值1-10:\n");
    scanf("%d",&k);
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int sz = (sizeof(arr) / sizeof(arr[0]));
    ret = binary_search(arr,k,sz);//arr传输过去的是arr首元素的地址
    if (ret == -1)
        printf("输入错误,找不到");
    else
        printf("找到了,下标为\n%d", ret);
    return 0;
} 
版权声明:若无特殊注明,本文为《若离风》原创,转载请保留文章出处。
本文链接:https://www.rlfit.cn/post-22.html
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框
可使用QQ号实时获取昵称+头像

私密评论

吃奶的力气提交吐槽中...


既然没有吐槽,那就赶紧抢沙发吧!