三种命令行的转换:
常用的ASCII值:
'A'=65
'a'=97
'space'=32
'0'=48
'1'=49
'/n'=10
十六进制数转换为二进制数的步骤:每一位十六进制数,转换为四位二进制数。
二进制转换成十六进制的方法是,取四合一法,即从二进制的小数点为分界点,向左(或向右)每四位取成一组。
组分好以后,对照二进制与十六进制数的对应关系,将四位二进制按权相加,得到的数就是一位十六进制数,然后按顺序排列,小数点的位置不变,最后得到的就是十六进制数。
局部变量不给初值,打印为随机
a=0是在while循环里面,执行一次销毁一次
a的值为1.2.3.4,默认为0
static:
static变量称为静态存储类型的变量,既可以在函数体内,也可在函数体外说明。(默认是0)局部变量使用static修饰,有以下特点:在内存中以固定地址存放的,而不是以堆栈方式存放只要程序没结束,就不会随着说明它的程序段的结束而消失,它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上次调用存入的数值
extern:
当变量在一个文件中的函数体外说明,所有其他文件中的函数或程序段都可引用这个变量。
extern称为外部参照引用型,使用extern说明的变量是想引用在其它文件中函数体外部说明的变量。
static修饰的全部变量,其它文件无法使用
^表示相异为1
在位运算中,某操作数右移3位,其结果相当于操作数除以8
==表示判断,结果为bool值
i++ 即后加加,原理是:先自增,然后返回自增之前的值
++i 即前加加,原理是:先自增,然后返回自增之后的值
continue语句与break语句使用场合类似,continue语句是不可以在单独的switch语句中使用,但可以在一个循环内的switch语句中使用。switch是属于判断选择代码,是用于控制流程流转,而无法像for、do…while、while一样实现循环。所以在switch中无法使用continue实现结束。
死循环:
goto死循环;loop: 和goto loop,loop中没有条件限制会出现死循环;
break死循环;break只能破坏一层循环,多层嵌套的的话也是死循环。
%s结束的标志是‘/n’
字符输入:
gets()与scanf()在字符串输入的使用差异:
gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
也就是说,gets()函数读取到\n(输入的回车)是会停止读取,但是它不会把\n包含到字符串里面去。然而,和它配合使用的puts函数,却在输出字符串的时候自动换行
有两个字符数组 a、b,则以下正确的输入语句是 A.scanf(“%s%s”,&a,&b);B.gets(a); gets(b);
对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。
所以“A.scanf("%s%s",&a,&b)”中,变量a、b多携带了“&”操作符,是错误的。而对于gets()函数的使用,其中参数为字符串变量(字符串数组名或字符串指针),所以“B.gets(a); gets(b);”是正确的用法。
字符串常量没办法被改变,所以只能存储在字符数组里
注:不同类型的指针做运算毫无意义。
如果指针为空,那么存的是0号内存单元。
NULL其实是个宏定义
#define null 0
数据的输入然后输出:
利用指针可以简化程序:
数组元素倒序输出:
利用行指针(数组指针)遍历整个二维数组:
字符的打印:
字符串常量,全局变量,static静态变量。 他们三个是程序结束的时候释放内存。
const总结:
const int a; // 指向const int; a不能被修改
int const a; // 指向const int; a不能被修改
const int *a; // 指向const int的指针; a可以被修改, *a不能被修改
int const *a; // 指向const int的指针; a可以被修改, *a不能被修改
int* const a; // 指向int的指针; a不能被修改, *a可以被修改
int const * const a; // 指向const对象的const int指针; a不能被修改, *a不能被修改
const int * const a; // 指向const对象的const int指针; a不能被修改, *a不能被修改