C语言函数部分知识点梳理及心得

一、知识点梳理

1.零碎知识点整理

  1. 设计一个函数步骤
    (1)想函数什么返回值 无 void
    (2)函数名的设计 见名知意
    (3)函数参数的设计(参数类型,个数等)
  2. 实参,形参
    (1)实参与形参必须个数相同,最好类型也相同,如果类型不同,会发生隐式转换 实参——>形参
    (2)按值传递 实参—(内存拷贝)—>形参 不同地址
    按地址传递 指向同一地址
  3. 被调函数在主调函数之下会警告
  4. 实参求值从右向左
  5. 函数不能嵌套定义,但可以嵌套调用
  6. 全局变量:在函数外声明(能少用就少用)
    未初始化时值为0
    作用域:从定义开始到文件尾
    生命周期:从程序开始到结束
  7. 局部变量:在函数内部声明的变量
    作用域:函数开始到结束
    生命周期:从函数指定定义语句开始到函数结束,函数结束会自动回收
  8. 不同作用域范围内可以声明同名变量
  9. 静态变量 static
    (1)static 局部变量
    作用域:从函数开始到结束
    生命周期:从程序开始到结束,且函数结束不会回收内存
    (2) static 全局变量
    static int b; 表示静态全局变量,隐藏,这个全局变量或函数不能被extern
  10. extern 外部声明,引用其他源文件函数或全局变量
  11. 头文件中不允许出现定义变量
  12. 同一个项目里不同c文件下不允许出现相同的全局变量

2.今日代码

  1. 正序打印正整数
void print(int n)
{
    if (n <= 0)
    {
        return;
    }

    print(n / 10);
    printf("%d\n", n % 10);
}
  1. 逆序打印正整数
void print(int n)
{
    if (n <= 0)
    {
        return;
    }
    printf("%d\n", n % 10);
    print(n / 10);

}
  1. 汉诺塔
void hannuota(char a, char b, char c, int n)
{
    if (n == 1)
    {
        tt++;
        printf("[%d]%c---->%c\n", tt, a, c);
        return;
    }
    else
    {
        hannuota(a, c, b, n-1);
        hannuota(a, b, c, 1);
        hannuota(b, a, c, n-1);
    }
}

3.今日练习

  1. 在C语言中,当函数调用时 实参和形参各占一个独立的存储单元
  2. 以下函数调用语句中实参的个数为 3 分别为v2,v5,v6
    exce((v1,v2),(v3,v4,v5),v6);
  3. 如果在一个函数的复合语句中定义了一个变量,则该变量 只在该符合语句中有效,在该符合语句外无效
  4. C语言规定,函数返回值的类型是由 在定义该函数时所指定的函数类型决定
#include
void sub(int s[]int y)
{ static int t=3;
y=s[t];t--}
main()
{ int a[]={1,234},i,x=0for(i=0;i<4;i++){
sub(a,x)printf("%d",x)}
printf("\n")}

输出为:
0000

main()
{ int w=5fun(w)printf("\n")}
fun(int k)
{ if(k>O) fun(k-1)printf(%d",k)}

输出为:
0 1 2 3 4 5

  1. 当调用函数时,实参是一个数组名,则向函数传送的是 数组的首地址
fun(float x)
{ float y;
y=3*x-4return y;
}

输出类型为  int

4.个人感悟

今天一天下来,收获颇多,但还是很累的,感觉自己有点跟不上同学。老师让课堂上编程的时候有些题目就想很长时间也想不出来,就比如中午下课前分钟老师让写题,有些同学下课前就写完了,但我一直到一点才调试出来。下午下课前做题,有时候我还没想出来,同学们就啪啪啪把答案敲出来了。有差距才有动力,希望接下来能继续加油,有所得吧。

你可能感兴趣的:(C语言函数部分知识点梳理及心得)