数据类型:
八进制数:一般以0开头;
十六进制数:以0x开头;
字符数据:单字符以char 定义,每个字母对应有ASCII码,小写字母比大写字母大32,A的ASCII码为65,字符的比较也是通过ascii的值来比较的;
i+++j是i(++)+j,但是这是很不规范的做法。
输入输出
%d 整数 %ld长整型
%x 十六进制 %u无符号数
%f 浮点数 %o八进制
%c 字符 %e指数形式
%s 字符串
占n列取m位小数 %n.mf
scanf一般加&,遇到已经是地址的不加,比如指针,数组。
比如:
char str[10];
scanf("%s",str);//以空格判断输入结束
printf不加&;
逻辑控制
逻辑表达式自左向右求解(如果没有括号的话);
do while 和while的使用关键是看while条件的初值是否是1,do while、while和for可以通用,for循环可以实现一切循环。for(t1;t2;t3)先执行t1,判断t2是否满足;是则执行内容否则退出;内容执行完后执行t3,再判断t2……。
go to一般不适用。
数组
**一维数组定义:**
char a[10]="asds";
char a[10]={"asds"};
char a[10]={'a','s','d','s'};
这三者的定义是一样的,在他们后面加上\0也还是一样,编译器会自动在后面加上\0。但是\0没有占字符位置!
上述这个字符数组a,可以存放的字符数是10个不是9个。
strlen(a)=4; 实际的字符数
sizeof(a)=10;数组总共可以容纳的字符数
定义全0
int a[10]={0};
**二维数组的定义:**
int a[3][3]={{1,2,3},{2,3,4},{3,4,5}};
int a[3][3]={1,2,3,2,3,4,3,4,5};
int a[][3]={1,2,3,2,3,4,3,4,5};
这三个表达式一样。
初始化原则,从左往右从上往下,少则补0.
字符串处理
puts(char*)输出一个字符串;
gets(char*)输入一个字符串;//以回车判断输入结束
strcat(char*,char*)将后一个字符串接到前一个的后面
strcpy(char*,char*)将后一个字符串赋值到前一个字符串
strncpy(char*,char*,n)将后面一个字符串的前面n个字符复制到前一个字符串
strcmp(char*,char*)字符串比较函数
strlen(char*)返回字符串的实际长度
strlwr(char*)将字符串大写换小写
strupr(char*)将字符串小写换大写
函数
被调函数在主调函数后需要声明
在定义函数时定义的形参在未出现函数调用时是不占据内存空间的,只有被调用了以后才被分配内存单元,调用结束后内存单元被释放。
函数调用时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元保留原值。
一维数组做函数参数形式为 str[],数组名做参数时,不是传值,而是把首元素的地址传递给形参数组,即为两个数组占据一个内存。
多维数组做函数参数形式为 str[][size],第一维的大小可以省略,但是第二维的不能省略。
**变量的存储空间有:**
程序区、静态存储区、动态存储区
全部变量是存放在静态存储区中的,程序中绝大部分变量都是在动态存储区里的。
**变量的存储类别有:**
静态存储类、动态存储类
具体有
auto:自动变量,绝大部分局部变量均为自动变量。
不赋初值时为一个不确定的值。
static:静态变量声明,是静态存储类别,静态声明不是指变量值无法改变,而是指变量值被保存,不会被销毁,直到程序运行结束才销毁,比如局部函数中的静态变量每一次运行都被保存。
静态局部变量不赋初值的话则默认为0或空字符。
外部函数仍然无法引用局部静态变量。
register:变量存放在寄存器中,当变量多次使用的时候可以增加运行效率。
只有局部自动变量和形式参数才可以作为寄存器变量。
数量有限,不能任意调用,对于不同的系统有不同的限制。
局部静态变量不能声明为寄存器变量。
extern:外部变量声明,从函数定义处开始一直到文件末尾。
可以在多个文件中使用,在一个文件中定义,其余文件中声明。
比如: file1中为 int A;
file2中为extern A;