//课一:熟悉Mac系统及常用工具,进制。c数据类型,常量变量,运算符,表达式,格式化输入输出。
1、
二进制:0b开头
八进制:0开头=====》转换过程中:相当于3位的二进制(记得8421)
十进制:正常数字
十六进制:0x开头============》相当于4位的二进制
某进制-->十进制:按权求和。
十进制-->某进制:连除倒取余。
十二进制:时钟,季节
二十四进制:小时制
六十进制:分钟,秒钟
2、c数据类型:
基本数据类型:byte,char,int(short,long),float,double,
构造型:枚举(enum),结构体(struct),数组,
3、
常量:在程序运行期间不可以被改变的量。--存储在常量区。
--> 整型常量
--> 浮点型常量
--> 字符常量
--> 字符串常量
变量:随时可以更改的量===》变量名可以当地址使用,因为在声明这个变量的时候,这个变量就和这个地址绑定在一起了。--存储在栈区。
-->定义:数据类型修饰符 变量名 = 初始值;
-->变量名:
-->命名规则:由字母,下划线,数字组成,以字母、下划线打头。
-->不能与系统保留字重名。
-->在同一个生命周期(同一个作用域)的变量是不能重名的。
-->见名知意。
4、
运算符:
-->赋值运算符 =
-->+、-、*、/、%
-->++、--(在前先参与运算,再自身运算)(在后先自身运算,再参与运算)
-->+=、-=
-->逻辑运算符 &&、||、!
--> ==、>=、<=
5、
表达式:常量、变量以及运算符组成。
-->算术表达式:
-->逻辑表达式:
-->
-->
6、oc中BOOL 型 非0即真
c中 bool型 非0即1
BOOL型占一个字节,1byte=8bit,是一个拥有8位存储空间的数据类型。所以在计算机中,当BOOL型的变量不等于0的时候,都会返回一个前8位的所存储的内容。也就是BOOL作为8位二进制数。其中YES:00000001
NO:00000000
易混淆点:1)----》%d %o %x 十进制,八进制,十六进制,计算机输出的时候不带前导符,如0,0x。
2) -----》int a;区别于 int a=0;编译的时候,两者都分配了空间,只不过,前者在分配完空间以后,空间里的内容是不确定的,有可能是开机时产生的随机数,也有可能是别的程序使用过后释放的,还有可能是0;但后者在分配完空间以后,顺手把该空间里的内容置为0。
3)-------》键盘缓冲区问题:首先,要明白,从键盘读入键盘缓冲区(buffer)的数据都是以ASCII码值存储的(包括回车)。当遇到两个连续的scanf输入字符的时候就要小心,要么在第二个scanf的前面加一个getchar()来接收buffer中的残留字符,要么就在第二个scanf的格式控制串前加一个空格,这时空格的作用就是吸收到buffer中的无限制的回车符、空格符以及Tab符。
1、
关系运算符:
--> == 、 >= 、 <=
2、
逻辑运算符:
--> && 、 || 、!
在逻辑与以及逻辑或的运算过程中,应当注意,短路现象,特别是结合了++,--一类的运算的时候。
条件运算符:
--> ? :
4、
-->if(条件表达式){
}
-->if(条件表达式){
}else{
}
-->if(条件表达式){
}else if(条件表达式){
}else{
}
5、
-->switch(int/byte/short/char/enum){
case 常量表达式:break;
default:break;
}
//课三:while,do{}while;,for循环。
1、
-->while(条件表达式){
循环体;
}
2、
-->do{
循环体;
}while(条件表达式);
3、
-->for(1初始值;2-5条件表达式;4-7循环增量){
3-6循环体;
}
//课四:一维数组,数组排序,字符数组。
1、
一维数组:相同数据类型的数据的集合。
-->类型修饰符 数组名[长度]={初始值};
-->数组名:首地址。
-->访问:数组名[下标]。
2、
数组排序:
-->冒泡排序
3、
字符数组:数组元素全是字符。
定义方式:
-->char ch[5]={'a','b','c','d','e'};
-->char ch[]={'a','b','c'};--自动计算字符数组的长度
-->char ch[]="yibella";
--->char ch[5]={1,2,3,4,5};也是可以的,char型可以存储ASCII码值以及0-255的数字。
-->字符串末尾会自动加'\0'。这样字符串的实际空间就要比字符串的有效字符的长度多1.
4、strlen();---字符串的有效字符的长度,不包括'\0'
5、strcpy(目的地址,源地址);把从源地址的首地址开始以'\0'为结束符的字符串 复制到以目的地址的首地址开始的内存空间。
6、strcat(目标地址,源地址);把从源地址的首地址开始以'\0'为结束符的字符串拼接到以目标地址的在'\0'前面的最后一个字符为头的后面。
7、strcmp(字符串1,字符串2);依次比较字符串1和字符串2相对应的字符的ASCII码值,一旦在哪个字符比较出结果后就直接返回int型的结果。==0,>0,<0三种情况。
//课五:二维数组,字符串数组,多维数组。
1、
二维数组:
-->数组的数组。
2、
字符串数组;
-->数组元素为字符串。
3、
多维数组
//课六:函数分类,函数声明和定义,函数调用,形参实参,函数嵌套调用。
1、
函数分类:-----》函数是c语言程序的基本单位。
-->无返回值无参数
-->无返回值有参数
-->有返回值无参数
-->有返回值有参数
2、
函数声明和定义:
-->声明在前,定义在后。
-->声明和定义的标题一模一样。
3、
函数调用:
4、
形参:是实参的副本。
实参:在主调函数中的传参。
5、
函数嵌套调用:
-->一个被调函数在调用另外一个函数。
//课七:结构体,结构体数组。
1、
结构体:
-->struct{ };
-->不同数据类型的数据的集合。
-->结构体内存空间分配:以其中数据类型所占字节数最长的作为基数,按倍数分配。
-->#pragma park(n) 按照n个字节对齐
2、
结构体数组:
-->就是数组里的元素为结构体而已。
-->
//课八:指针
1、
指针:
-->一般的
-->数组 --数组名=指针变量名
-->字符数组:
-->字符串数组:
-->结构体 --指针变量名=&结构体变量名
-->结构体数组 --指针变量名=数组名
//课九:结构体指针
1、结构体指针
2、结构体数组与指针的关系
3、预编译指令
-->宏定义---就是在预编译期间的一个替换工作。
-->普通宏
-->带参数的宏
-->条件编译
//课十:动态内存分配
1、存储区划分
-->常量区 ||}
-->代码区 ||}
-->静态区 ||}
-->栈区 ||}这四个区的内存空间都是系统自动分配和自动释放的。
-->堆区--自己分配内存,自己释放内存(malloc(字节数),free(内存首地址))
2、堆内存分配函数
-->malloc()
-->free()
3、其他内存分配函数
-->calloc
-->realloc
-->
4、内存操作函数
-->初始化内存 memset()
-->内存拷贝
-->内存比较
-->
//课十一:函数指针、回调函数
1、函数指针定义
2、回调函数---被函数指针调用的函数
3、动态排序
4、函数返回值是函数指针