有一天我看见过44次日落
数据类型
C语言的变量,必须再使用前定义,并且确定类型
整数
char、short、int、long、long long(C99)
浮点数
float double\long double(C99)
逻辑
bool(C99)
指针
自定义类型
类型有和不同
类型名称:int、long、double
输入输出的格式化:%d\%ld\%lf
所表达数的范围:char<short<int<float<double
内存中所占据的大小:二进制数(补码)、编码
sizeof
是一个运算符,给出某个类型或变量在内存中所占据的字节数
sizeof(int)
sizeof(i)
是一个静态运算符,它的结果在编译时刻就决定了
不要在sizeof括号里做运算,这样运算不会做的。
整数类型字节
#include <stdio.h>
int main()
{
printf("%d",sizeof(char));
printf("%d",sizeof(short));
printf("%d",sizeof(int));
printf("%d",sizeof(long));
printf("%d",sizeof(long long));
return 0;
}
整数的内部表达
二进制负数
1个字节可以表达的数:
00000000-11111111(0-255)
三种方案:仿照十进制,有一个特殊的标志表示负数
取中间的数为0,如10000000表示0,比它小的数是负数,比它大的数是正数
补码
补码
数的范围
对于一个字节(8位),可以表达的是:
0000000-11111111
其中
00000000->0
11111111~10000000->-1~-128
00000001~01111111->1~127
unsigned
如果一个字面量常数想要表达自己是unsigned,可以在后面加u或U
255U
用l或L表示long(long)
unsigned的初衷并非扩展数能表达的范围,而是为了做纯二进制运算,主要为了移位
整数越界
整数是以纯二进制方式进行计算的,所以:
11111111+1->100000000 ->0
01111111+1->10000000->-128
10000000-1->01111111->127
整数的输入输出
浮点类型
超过范围的浮点数
printf输出inf表示超出范围的浮点数:+-无穷
printf输出nan表示不存在浮点数
但是整数/0是不可以的
浮点数的内部表达
字符类型
char是一种整数,也是一种特殊的类型:字符。这是因为:
用单引号表示的字符字面量:‘a','1'
''也是一个字符
printf和scanf里用%c来输入输出字符
逃逸字符
用来表达无法打印出来的控制字符或特殊字符,它由一个反斜杠“\”开头,后面跟上另一个字符,这两个字符合起来,组成了一个字符
printf("请分别输入身高的英尺和英寸,""如输入\"5 7\"表示5英尺7英寸");
自动类型转换
当运算符的两边出现不一致的类型时,会自动转换成较大的类型
大的意思是表达的数的范围更大
char->short->int->long->long long
int->float->double
对于printf,任何小于int的类型会被转换成int;float会被转换成double
但是scanf不会,要输入short,需要%hd
强制类型转换
要把一个量强制转换成另一种类型(通常是较小的类型)需要
格式:(类型)值
bool
#include <stdbool.h>
之后就可以使用bool和true、false了
逻辑运算
逻辑运算是对逻辑量进行的运算,结果只有0或1
逻辑量是关系运算或逻辑运算的结果
如不能写成4<x<6,要写成x>4&&x<6
条件运算符
count=(count>20)?count-10:count+10;
逗号运算符
逗号用来连接两个表达式,并以其右面的表达式作为它的结果。逗号的优先级是所有的运算符中最低的,所以它两边的表达式会先计算;逗号的组合关系是自左向右,所以左边的表达式会先计算,而右边的表达式的值就留下来作为逗号运算的结果。
函数
函数是一块代码,接受零个或多个参数,做一件事情,并返回0个或一个值
调用函数
函数名(参数值);
()起到了表示函数调用的重要作用
即使没有参数也需要()
如果有参数,则需要给出正确的数量和顺序
这些值会被按照顺序依次用来初始化函数中的参数
函数先后关系
C的编译器自上而下顺序分析你的代码
如果把sum放到下面
这时候就要用到函数原型了
#include <stdio.h>
void sum(int begin,int end); //声明
int main()
{
sum(1,10);
sum(20,30);
sum(35,45);
return 0;
}
void sum(int begin,int end) //定义
{
int i;
int sum=0;
for(i=begin;i<=end;i++){
sum+=1;
}
printf("%d到%d的和是%d\n",begin,end,sum);
}
函数头,以分号“;”结尾,就构成了函数的原型函数原型的目的是告诉编译器这个函数长什么样
名称
参数
返回类型
传值
每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他参数没有关系
对于函数参数表中的参数,叫做形式参数,调用函数时,叫做实际参数
本地变量
也叫局部变量。