参数与变量


在线C环境:https://clin.icourse163.org/

 

1. 函数原型

2.如果不知道

也就是把要调?的函数放到 下?了

旧标准会假设你所调?的函 数所有的参数都是int,返回 也是int

如果恰好不对...

3. 函数原型

  • 函数头,以分号“;”结尾,就构成了函数的原型 ? 函数原型的?的是告诉编译器这个函数?什么样
  1. 名称
  2. 参数(数量及类型)
  3. 返回类型
  • 旧标准习惯把函数原型写在调?它的函数??
  • 现在?般写在调?它的函数前?
  • 原型?可以不写参数的名字,但是?般仍然写上

参数传递

4.调?函数

  • 如果函数有参数,调?函数时必须传递给它数量、 类型正确的值
  • 可以传递给函数的值是表达式的结果,这包括:
  1. 字?量
  2. 变量
  3. 函数的返回值
  4. 计算的结果

5. 类型不匹配?

调?函数时给的值与参数的类型不匹配是C语?传统 上最?的漏洞

编译器总是悄悄替你把类型转换好,但是这很可能不 是你所期望的

后续的语?,C++/Java在这??很严格

6. 传过去的是什么?

这样的代码能交换a和b的值吗?

#include 

void swap(int a,int b);
int main() {

    int a=5;
    int b=6;
    swap(a,b);
 
  printf("a=%d b=%d\n",a,b);
   
    return 0;
}

void swap(int a,int b){
    int t=a;
    a=b;
    b=t;
}

C语?在调?函数时,永远只能传值给函数

7. 传值

  • 每个函数有??的变量空间,参数也位于这个独 ?的空间中,和其他函数没有关系
  • 过去,对于函数参数表中的参数,叫做“形式参 数”,调?函数时给的值,叫做“实际参数”
  • 由于容易让初学者误会实际参数就是实际在函数 中进?计算的参数,误会调?函数的时候把变量 ?不是值传进去了,所以我们不建议继续?这种 古?的?式来称呼它们
  • 我们认为,它们是参数和值的关系

8.本地变量

? 函数的每次运?,就产?了?个独?的变量空间,在 这个空间中的变量,是函数的这次运?所独有的,称 作本地变量

? 定义在函数内部的变量就是本地变量

? 参数也是本地变量

9. 变量的?存期和作?域

? ?存期:什么时候这个变量开始出现了,到什么时候 它消亡了

? 作?域:在(代码的)什么范围内可以访问这个变量 (这个变量可以起作?)

? 对于本地变量,这两个问题的答案是统?的:?括号 内——块

10.本地变量的规则

? 本地变量是定义在块内的

  1. ? 它可以是定义在函数的块内
  2. ? 也可以定义在语句的块内
  3. ? 甚?可以随便拉?对?括号来定义变量

? 程序运?进?这个块之前,其中的变量不存在,离开这个块,其中的变量 就消失了

? 块外?定义的变量在??仍然有效

? 块??定义了和外?同名的变量则掩盖了外?的

? 不能在?个块内定义同名的变量

? 本地变量不会被默认初始化

? 参数在进?函数的时候被初始化了

11. 没有参数时

  • void f(void);
  • 还是
  • void f();
  1. 在传统C中,它表?f函数的参数表未知,并不表? 没有参数

12.逗号运算符?

  • 调?函数时的逗号和逗号运算符怎么区分?
  • 调?函数时的圆括号?的逗号是标点符号,不是运算 符
  1. f(a,b)
  2. f((a,b))

13.函数?的函数?

C语?不允许函数嵌套定义

14. 这是什么?

? int i,j,sum(int a, int b);

? return (i);

15. 关于main

? int main()也是?个函数

? 要不要写成int main(void)?

? return的0有?看吗?

? Windows:if errorlevel 1 …

? Unix Bash:echo $?

? Csh:echo $status