C语言02
一. 函数的分类
C语言中的函数就是面向对象中的“方法”。
C语言的函数可以大概分为3类:主函数(一定要有),自定义函数(可有可无),C语言提供的库函数(eg:stdio.h中的输出printf()输入函数scanf())。
二. 函数的声明和定义
1. 在java中,每个方法的定义顺序没有限制;而在C语言中会报错,必须前面定义过来,后面才能调用,如果要是先使用函数,必须先做个函数声明,并不用实现,并且可以省略参数名称。
2. 在大型的C程序中,为了分模块进行开发,一般会将函数的声明和定义实现分别放在2个文件中,函数声明在.h头文件中,函数定义放在.c源文件中。然后在main.c中包含sum.h即可使用sum函数。
3. 为什么在main.c中包含sum.c?
原因:编译器会编译所有的.c源文件,这里包括main.c、sum.c,编译成功后生成sum.obj、main.obj文件,当链接这两个文件时链接器会发现sum.obj和main.obj里面都有sum函数的定义,于是报"标识符重复"的错误。
三. 函数的形参和实参
如果是基本数据类型,是不会影响实参的。函数调用的时候,纯粹是把实参的值传递给形参,实参和形参是两个不同的变量,互不影响。
四. 输入输出函数
是stdio.h中声明的函数,因此使用前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据。调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量
使用%d,说明对应的格式符参数必须是整型。
五. 基本数据类型
C语言有丰富的数据类型,因此会很适合用来编写数据库,DB2,Oracle都是C语言写的。
C语言包括基本数据类型(整型,浮点型,字符型)和指针类型(void*)和构造类型(数组,结构体struct,共用体union,枚举enum),空类型(void)。
任何变量都要先定义类型再使用。因为变量的类型决定了变量占有的储存空间,所以定义变量类型,就是为了给该变量分配适当的存储空间。
局部变量的使用和java稍微有点不一样
1> 在Java中,你声明了一个局部变量后,如果没有经过初始化赋值就使用该变量,编译器直接报错
2> 在C语言中,你声明看一个局部变量后,没有经过初始化赋值是可以使用的,但是不安全
* 如果是int类型变量是全局的,系统会默认赋值为0
char的取值范围是:ASCII码字符,或者-128~127的整数,且只能存储一个字符,不能储存汉字,因为汉字占了两个字符。
// 方式1
char c = 'A';
// 方式2
char c = 65;
六. 类型修饰符
有以下4种类型修饰符(限定符):
- short 短型
- long 长型
- signed 有符号型
- unsigned 无符号型
1> short和long可以提供不同长度的整型数,也就是可以改变整型数的取值范围,比如short的取值范围是-32768~32767,long的取值范围就是-2147483648~2147483647
2> 当然,数据的存储长度也会跟着变化。比如,在64位编译器环境下,short占2个字节(16位),int占4个字节(32位),long占8个字节(64位)。世界上的编译器林林总总,不同编译器环境下,取值范围和占用的长度是不一样的,不过幸运的是,ANSI \ ISO制定了以下规则:
* short跟int至少为16位(2字节)
* long至少为32位(4字节)
* short的长度不能大于int,int的长度不能大于long
* char一定为为8位(1字节),毕竟char是我们编程能用的最小数据类型
1> signed代表有符号,包括正数、负数和0;unsigned代表无符号,只包括正数和0。比如,signed的取值范围是-32768~32767,那么unsigned的取值范围是0~65535,当然,不同的编译器有不同的取值范围
2> 其实,signed和unsigned的区别就是它们的最高位是否要当做符号位,并不会像short和long那样改变数据的长度,即所占的字节数,
七. 基本语句和运算
- 循环语句(do while、while、for)
- 条件语句(if 、if-else、switch)
- goto语句
1. 算数运算符
- + 加法运算符
- - 减法运算符,或负值运算符
- * 乘法运算符
- / 除法运算符
- % 模运算符,或称取余运算符,要求%两侧均为整型
2. 关系运算符
- < 小于运算符
- <= 小于等于运算符
- > 大于运算符
- >= 大于等于运算符
- == 等于运算符
- != 不等于运算符
* 关系运算的结果成立就为"真"(比如5>=4),不成立则为"假"(比如5<4)
* 在Java中,关系运算的结果为"真"就返回true,"假"则返回false,用boolean类型的变量来接收
boolean b1 = 5 > 4; // true
boolean b2 = 5 < 4; // false
C语言中没有boolean类型
* 在C语言中,关系运算的结果为"真"就返回1,"假"就返回0
3. 逻辑运算符
- && 逻辑与运算符
- || 逻辑或运算符
- ! 逻辑非运算符
逻辑运算的结果也只有两个:成立就为"真",返回1;不成立就为"假",返回0
整个逗号表达式的值是最后一个表达式的值,且必须要用()包住。
4. * sizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。
int size = sizeof(10);
printf("10所占的字节数:%d", size);
输出结果:,10是int类型的数据,在64bit编译器环境下,int类型需要占用4个字节
* sizeof一共有3种形式
- sizeof( 变量\常量 )
sizeof(10);
char c = 'a';
sizeof(c);
- sizeof 变量\常量
sizeof 10;
char c = 'a';
sizeof c;
- sizeof( 数据类型 )
sizeof(float);
注意,不可以写成sizeof float;