入门:解释与编译的区别:解释性语言运行的时候需要解释器(比如Java需要JVM解释器,Python需要Python解释器),而编译性语言可以直接机器码。
黑黑的框:-->终端、命令行、控制台。./
程序框架都要有**;结束都要有分号;有些地方换行和空格不影响程序;不要用中文全角,中文输入法;
1.void 在英文中作为名词解释为“空虚,空间,空隙”,而在C语言中,void被翻译为“无类型”,相应的void*为“无类型指针”。
2.#include(包括)
3.stdio 就是指 “standard input & output"(标准输入输出)
所以,源代码中如用到标准输入输出函数时,就要包含这个头文件!
注意:// 单行注释 /*
多行注释
多行注释
多行注释
*/
4.数据基本类型:
算术类型,包括两种类型:
整数类型:字符型char(1个字节),短整型short (2),长整型long(>=4),基本整型int(4),双长整型long long(8),布尔型bool(1)
注意:1.bool是布尔型变量,也就是逻辑型变量的定义符,类似于float,double等,只不过float定义浮点型,double定义双精度浮点型。
2.布尔型变量的值只有 真 (true) 和假 (false)。3.最好别用bool,bool变量可用int代替。
浮点类型:单精度浮点型float(4),双精度浮点型double(8),多精度浮点类型long double(8)------详见配图
枚举类型,(enum):1.取值:默认从零开始,以此递增1,也可以自定义数值。2。枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。
(不熟) 枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.
例如:
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };
优点:1.增加代码可读性和可维护性
2.和define定义的标识符相比,枚举有类型检查更加严谨
3.防止了命名污染(封装)
4.便于调试,define不便于调试,调试时是已替代的内容
5.使用方便,1次可以定义多个常量
整型进制:1,默认为10进制 ,10 ,20
2,以0开头为8进制,045,021
3.,以0b开头为2进制,0b11101101
4,以0x开头为16进制,0x21458adf
其他类型:1.指针类型:char*、int*、void*......(char*不一定指的是字符串)
2.数组类型:int ar[]
3.机构体类型:成员:可以是标量、数组、指针、甚其他结构体,通过点操作符(.)访问
(不熟) 一般形式如下:
struct<结构体名><结构体变量名>;
eg:struct student student1,student2;
关键字struct要与结构体名student一起使用,共同构成结构体类型名。
内存对齐:1.自身类型有一个对齐值
2.自定义类型有个对其值(内部成员最大的那个)
3.程序有个指定的对齐值
4.程序有个有效的对齐值 注:后面后又了解!
对齐原因:1.平台原因(移植原因)
2.性能原因:对齐的内存访问仅需一次
位段(位域)1.节省空间,但不能跨字节储存
2.不能跨类型储存 *超出的高位会被丢弃
结构体传参1.传值传参
2.传址传参(相较于前者更好一点,省去了开辟更大的空间)
联合体(union)1.按照内部最大的成员大小定义空间(应保证至少有能力保存最大的那个成员)
2.当最大成员大小不是最大对其数的整数倍时,要对齐到最大对其值的整数倍
3.可用于判断大小端、表示点分十进制
函数类型:void fun()
4.运算符(要注意优先级)1.算术运算符:(+ - * / %(取余) ++ --)
2.关系运算符:(> < = >= <= !=)
3.逻辑运算符:(!(假) &&(和) ||(或))
4.赋值运算符:(= += -= *= /= %=)
5.位运算符:(<<(远小于) 、>>(远大于)、 ~(一种单目操作符,即对一个数的二进制按位取反)、 |(有1为1,全0为0)、
^(其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1)、 &)(地址)
6.条件运算符:(? :)三目操作符 例子:<表达式1>?<表达式2>:<表达式3>;
返回值:先求表达式 1 的值,如果为真,则执行表达式 2,并返回表达式 2 的结果;如果表达式 1 的值为假,则执行表达式 3,并返回表达式 3 的结果
7.逗号运算符:(,)操作数从左向右一次执行,最终结果为逗号最右边的值。(比较基本)
8.指针运算符:(* &)不能对空指针进行解引用 ++ --操作
5.语句1.分支语句:1.if语句:else与之最近的if相匹配
2.switch语句:每一个case后的break语句不可省;最后一个分支default语句不可省,每个case具有一个唯一值;
switch(整型表达式){case:整型常量表达式...}
3.goto语言:在需要跳转的语句前加标签,尽量避免使用( 语句用于在一个程序中转到程序内标签指定的位置,标签实际上由标识符加上冒号构成)
2.自由主题:1.for循环语句:注意边界问题、控制变量尽量采用“半开半闭区间”不可在循环体内部修改变量
2.while循环语句:嵌套循环,只跳出内层循环
3.do while 循环语句:与while语言相同,但先执行一次在进行循环
6.数组1.一维数组:数组名表示数组首元素地址,当数组名作为sizeof或&的操作数时,数组名表示整个数组
2.二维数组:相当于一维数组,区别在于其第一维元素其实是一个数组,数组名表示整个数组,当数组名作为sizeof或&的操作数时,数组名表示数组的第一行。
3.指针数组:int*arr[](整型指针数组) char*arr[](字符型指针数组)
4.函数指针数组:int (*p[5])(int,int)p先和[]结合,数组内容是int(*)(int,int)的函数指针
5.柔性数组:特点:1.结构体中柔性数组成员前必须至少一个其他成员;
2.sizeof返回这种结构的大小不包括柔性数组的内存;
3.包括柔性数组的结构用malloc()函数分配内存时,分配内存应大于结构大小
优点:1.方便释放内存
2.减少内存碎片,提升访问速度
7.内存分布:1.栈区:由编译器自动分配释放,存放为运行函数分配的局部变量、函数形参、返回数据、返回地址等。操作方式类似于数据结构中的栈
2.堆区:一般由程序员分配释放,若程序员不释放,程序结束时由OS回收
3.全局区(静态区):相对而言的全局,不绝对,存放全局变量、静态数据程序结束后由系统释放
4.文字常量区:存放常量字符中,程序结束后由系统释放
5.程序代码区:存放函数体(类成员函数和全局函数)的二进制代码
8.字符串:1.结尾有'\0'的字符数组,字符串由有有效字符和字符串结束符‘\0‘组成。
2.数组的长度至少是字符串长度+1,‘\0’不是字符串的内容,’\0’并不算入字符的长度。
3.‘\0’是结束的标志,,决定是否结束循环;
4.static char s[6]={'h','a','p','p','y','\0'};
static char s[6]="happy";(这种两种形式进行初始化。)
注意:用“”进行初始化;
5.数组与指针有着天然的联系;1.构建用数组,处理用指针;
10.格式控制符
十进制的整型: %d %md %ld %u (无符号) %lu
八进制: %o %#o # --> 输出进制的符号
十六进制: %x %#x %#X
字符: %c
字符串: %s
单精度浮点: %f %.nf --> n 表示精度
双精度: %lf
长双精度 : %Lf
地址: %p
11.break 与 continue
break: 跳出循环结构 / 跳出当前层的循环
continue : 结束当前这一次循环,重新进入下一次的循环
下一篇:自动切换背景的登录页面