1.1相等为两个==;一个=为赋值;(if判断的条件上判断相等为两个’==‘)
赋值=左边为变量,右边为常量,常量不可变
1.2 ++a和a++的理解:
++a:a先加一再执行赋值运算;
a++: 先将a赋于变量之后再加一;
例:
#include <stdio.h>
int main()
{
Int a = 0;
int b = 0;
Int x,y;
//a++和++a单独使用时
a++;
++b;
printf("%d---%d\n",a,b);
//此时的结果为a=1;b=1;
//当++使用赋值语句时
x = a++;
y = ++b;
printf("%d----%d\n",x,y);
//此时区别就出现了,输出x=0;y=1;
return 0;
}
1.3负数的原码——变成补码:按位取反再加1,符号位不参与运算
1.4 枚举enum:
Enum data{ A,B,C...};其中A必须给一个初值;后面 的数依次加一;
1.5 变量的引用:局部变量在执行完模块后(一个{}就是一个模块),其内存空间会被自动释放掉
1.6 判断真假时,只有为0时才为假,非0全为真(即使是符号或者字符,也表示非零);
1.7 Switch函数,每个语句结束一定不能少break;不然会继续往下执行直到遇到break或者结束;comtinue和break的区别:
1. continue——跳过本次循环,执行下一次循环;
2.Break 直接跳出该循环体 ;
1.8 使用循环语句时,一定要定好对应的结束条件,for和while都是语句为真时才执行对应的功能模块;
1.9 数组初始化时,一定要注意二维数组不得省略列数;字符串的结束标志是’\0‘,要用到字符时,’\0‘可以作为循环的结束标志;
1.9.1 定义数组时,大小必须事先定好,数组的下标只能是常量,不能是变量;
2.0 头文件的引用,如果不知道使用的函数或者其他命令所用到的头文件,可以使用man+指令来查看该函数的信息,头文件必不可少;
2.1 指针的初始化,当不知道指针的指向时,可以先使用空指针 :
数据类型 *(指针名) =NULL 以避免野指针的出现;
2.2 如果要使用getchar输入字符时要注意缓冲区域垃圾字符的处理,如果上一个是输入scanf(),输出后getchar()会将’\n‘ 当做一个字符来输入,如果前面输入为gets(),后面就可以正常输入;
2.2.1 gets和printf的区别:
scanf :当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中。
gets:可接受回车键之前输入的所有字符,并用’\0’替代 ‘\n’.回车键不会留在输入缓冲区中
int mian()
{
Char str[32] = {0};
Scanf(“%s”,str);
Puts(str);
Char arr;
Arr = getchar();
Putchar(arr);
//这里str输出后,会残留一个’\n’,getcahr()会将这个当做输入的字符;
Char str[32] = {0};
gets(str);
Puts(str);
Char arr;
Arr = getchar();
Putchar(arr);
//这里getchar就可以正常输入
}
getchar()的作用:清理缓冲区的垃圾字符 ’\n‘’空格‘’TAB‘等;
2.3 文件封装
1. 头文件的封装(头文件名.h): 2. 功能函数的封装:.c文件 3. 主函数的封装:.c文件
#ifndef _文件名_ 自定义的头文件 自定义的头文件
#define _文件名_ 功能函数体; main函数()
所有用到的头文件
函数声明;
#endif
2.4 段错误的解决
2.4.1 内存的分配:
1.静态内存区(编译时计算机自动分配):存储静态全局变量,静态局部变量,全局变量;
2.动态内存区:(运行时分配)包括栈区和堆区;
2.1:栈区:存储函数的形参和局部变量(运行完自动释放)【编译器管理】
堆区:自己通过指定的函数所分配的空间,需要自己手动分配【free()】,这些不会自动释放.【程序员管理】
段错误的原因
1.程序访问的内存超出了所开辟的内存大小。
2.某个程序发生越界访问(数组越界,变量数据类型不一致)时,CPU会发生相应的保护程序,于是segmentation fault就出现了,错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的,还有可能是缺少文件或者文件损坏。
其一的解决方法:
通过gdb调试来查看段错误的行数;
步骤:
1.gcc -g 加文件名 -o 要生成的可执行文件的名字;(- g会产生一个gdb可调试的文件)
2.gdb 可执行文件的名字;
2.4.2 gdb 的部分用法
R:开始调试,运行到断点
显示代码内容:
L+行号:
不加行号,默认查看10行;
Where:查看当前的位置
Until+行号:执行到该行;
断点设置:
B+行号:在b行打断
D+行号:删除断点
C:从当前位置开始调试到下一个断点
q:退出调试
2.5 定义动态内存时,内存是有限的,变量使用完后要使用free()来释放运行完的变量,释放完的变量不能再次进行释放,如果再次释放,程序会直接崩溃。malloc 和 free 一定要成对存在,一一对应。有 malloc 就一定要有 free,有几个 malloc 就要有几个 free,每释放一个指向,动态内存的指针变量后要立刻把它指向 NULL,避免指针变成野指针。