C语言学习笔记Day2
1:求素数的函数: int isPrime(int i) { int ret=1; int k; for(k=2;k<i-1;k++) { if(i%k==0) { ret=0; break; } } return ret; }
2.函数定义和调用。 函数是一块代码,接受零个或多个参数,做一件事情,并且返回另个或者一个值。 组成:函数头,函数名,函数体,返回类型,参数表。 调用:
1. 函数名(参数值);
2. ()起到了表示函数调用的重要作用;即使没有参数也需要();
3. 如果有参数需要给出正确的数量和顺序。
4. 些值会被按照顺序依次用来初始化函数中的参数。
5. 无返回值的函数,void 函数名(参数表)
调用的函数提倡单一出口
3.函数原型。 函数头,以分号“;”结尾,就构成了函数的原型。void sum(int begin,int end)红色部分可以不用写,因为编译器编译的过程中不会检查函数的名称,只会检查函数的类型。
4.参数传递。 类型不匹配?
1. 调用函数时给的值与参数的类型不匹配是C语言传统上最大的漏洞;
2. 编译器总是悄悄地替你把类型转换好,但是这很可能不是你所期望的;
3. 后续的语言,C++/Java在这方面很严格;
5.传值。
* 每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系。
* 形式参数(参数):调用函数参数表中的参数;/****/实际参数(值):调用函数时给的值。
* eg:void cheer(int a,int b); eg:cheer(a,b)
6.本地(局部)变量。
* 函数每次运行时都会产生一个独立的变量空间,在这个空间中的变量就成为本地变量。
* 本地变量的规则:本地变量是定义在块内的,它可以是定义在语句的块内,甚至可以随便拉一对大括号来定义变量,程序进入这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了。块外面定义的变量在里面仍有效。块里面定义了和外面同名的变量则掩盖了外面的。
7.函数庶事。
* void f();在传统的C中,它表示f函数的参数表未知,并不表示没有参数。
* 逗号运算符:(关键是看传了几个参数进去的问题)
eg:f(a,b)-->就是逗号,两个参数值。 f((a,b))-->先进行括号里面的运算,即一个参数值b。
* C语言不允许函数嵌套定义。
8.初试数组。(遍历数组)
9.数组的使用。 C99之后可以用变量来定义数组的大小 数组的每个单元就是数组类型的一个变量,使用数组时放在[]中的数字叫做下标或者索引,从0开始计数。 下标的有效范围:编译器和运行环境的=都不会检查数组下标是否越界,无论是数组单元做读还是写。一旦程序运行,越界的数组访问可能造成问题,导致程序崩溃。eg:segmentation fault。但是也可能运气好,没造成严重的后果。所以这是程序员的责任来保证程序只使用有效的下标值。
10.数组变量本身不能被赋值,要想将一个数组的内容赋给另一个数组必须要用遍历。数组作为函数参数时,往往要用另一个变量来传递数组的大小。
11.如何判断素数这样可以节省一半的时间.
12.二维数组的遍历。a[i][j] 先行后列;
二维数组的初始化:列数是必须给出的,行数可以有编译器来数;每行一个[],逗号分隔;最后的逗号可以存在,有古老的传统;如果省略表示补零;也可以使用定位(*C99 ONLY)