C语言学习中的部分总结

C语言汇总
计算机程序和指令
1、 程序:计算机能够识别的一组有序的指令。
2、 计算机能够识别的操作。
例:Linux系统中的a.out
程序的设计步骤
程序设计步骤:编辑→编译→调试
字符数字的储存(ASCII码的应用)
1、 当存入计算机的数据为非数值数据时,无法直接存入。因此设定了一套单字节字符编码形式,方便通信。后来成为国际标准,其表达方式即ASCII码。
2、 ASCII码共256种组合,但128-255不常使用,因此基础ASCII码为7位二进制数。
3、 ASCII码中需要记住的三个特数值,分别为‘0’的值位48,‘A’的值为65,‘a’的值为97。
因此在ASCII码中,字母的大小写的ASCII值差32,可以在后续的大小写转换中用到。
数值数据的存储
1、 在计算机中的数值数据,为了保证计算的正确性,都是按照补码的形式来存储数据。
2、 在有符号数的存储中正数的原码、反码、补码都是它本身;负数的原码为直接所转换的二进制数(最高位代表符号位),反码即按位取反,补码为反码+1;
不同类型数据结构的存储大小
32os:字符型:char(1字节)
整型int(4字节)、long(4字节)、short(2字节)
浮点型float(4字节)、double(8字节)
64os:字符型:char(1字节)
整型int(4字节)、long(8字节)、short(2字节)
浮点型float(4字节)、double(8字节)
转义字符
C中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,大小为1字节。
例:\ddd表示三位8进制数
\xhh表示两位16进制数
常量与变量
常量
常量的数值不能进行改变,因此常量不能进行自增运算。
字符常量、整型常量、浮点型常量、字符串常量、标识常量
1、 整型常量有着不同的进制,如二进制、八进制、十进制和十六进制。
2、 浮点型常量的输出中%g可以选择一种合适的形式输出
3、 字符串常量以‘\0’结尾。
4、 标识常量(宏)只是一个简单的替换,不能改变运算的优先级别。
变量
需要在内存空间中开辟一块空间存储数据,因此区别于常量,变量可以进行自增自减运算。
定义一个变量需要:存储类型 数据类型 变量名
存储类型
1、 auto:默认定义类型,空间开辟在堆区。
2、 register:修饰局部变量,存储在寄存器中。
3、 static:修饰局部变量和全局变量,存放在静态区。初始化的数据放在静态区的.data未初始化的放在静态区的.bss。
static修饰的局部变量,会改变其生命周期(从开辟空间到释放空间),初始化过的局部变量在static修饰下会只初始化一次。未初始化的局部变量会被初始化赋值为0;
static修饰的全局变量,会限制其作用域。
4、extern:修饰全局变量,告诉函数在其他地方定义了该变量可直接引用。
数据类型转换
分为隐式类型转换和强制类型转换
强制类型转换
程序员自己去转化,在需要转化的数据前加想要转化的数据类型。
例 int i = (int)3.14;
隐式类型转换

横向箭头自动转变,纵向箭头只有混合运算才会转换。
运算符
运算符优先级:单算移关与,异或逻条赋。
一级运算符:前缀自增(++i)、前缀自减(–-i)、单目转型表式式(取地址& ,* , 正号+ ,负号-、 位反~ 逻辑否!)、求类型长度(sizeof)。
二级运算符:“ * ” 乘法运算符,“ + ”加法运算符。
三级运算符:<< 左移运算符;>> 右移运算符。
四级运算符:<、<=、>、>=关系运算符,“ == ”等于运算符;“ != ”不等于运算符(结果为真1假0).
五级运算符:“ & ”按位与运算符。
六级运算符:“ ∧ ”按位异或运算符。
七级运算符:“ | ”按位或运算符。
八级运算符:“&&”逻辑与运算符,“ || ”逻辑或运算符(截断法则:与运算中有0则不进行后续条件运算;或运算中有1则不进行后续运算)。
九级运算符:? :条件运算符。
十级运算符:“=”赋值运算符。
注:
1、 ()[]运算等级在一级运算符之上。
2、移位运算中,若移位的为无符号数,左移放弃高位,低位补0。右移放弃低位,高位补0;若移位的为有符号数,则需要保留符号位的前提下,左移放弃高位,低位补0。右移放弃低位,高位补1。
输入输出
输出
%d:以十进制进行输出。
%o:以八进制进行输出。
%x%X:以十六进制进行输出(0x60、0X60)。
#:自动在八进制和十六进制进行输出前进行前缀。
%u:以无符号数进行输出。
%hd:short类型。
%ld:long类型。
%lld:long long类型。
%c:字符型进行输出。
%f:以浮点型输出。
%lf:以double行进行输出。
%e:以指数型进行输出。
%g:以适合的形式输出小数。
%m.nf:
m:表示输出数据所占的域宽,默认右对齐,若m大于实际长度则补0,当m小于实际长度,原样输出。
.n:决定输出小数点后的n位。
getchar();:返回获得的字符的ASCII码。
gets:字符串的输入(会获取空格、回车和TAB键等);
输入
scanf(“格式控制串”,地址表);
格式控制串:原样输出的内容+格式化符
&+变量名:获取该变量地址。
可以使用%*c抑制n个字符。用于解决输入中的不想要的空格。
putchar();:需要的参数,字符的ASCII码。
puts:字符串的输出。
三大结构
1、 顺序结构
按照一定的先后顺序去执行。
2、 选择结构
2.1单分支if结构
If(表达式)
{
语句;
}
先判断表达式,若成立再执行语句。
2.2双分支if结构
If(表达式)
{
语句1;
}
Else
{
语句2;
}
先判断是否成立,若成立则执行语句1 ,不成立则执行语句2。
2.3多分支if结构
If(表达式1)
{
语句1;
}
Else if(表达式2)
{
语句2;
}
……
Else
{
语句n;
}
从上往下判断表达式,是否成立,若成立表达式成立,则执行对应语句。
Switch语句
Switch(表达式)
{
Case 标号1:语句1;
Case 标号2:语句2;
Case 标号3:语句3;
……
Default 语句n;
}
1、 表达式不能为float值。
2、 标号必须为常量。
3、 当表达式等于标号时,就执行冒号后的语句,知道switch,case语句结束为止,或遇到break结束。
4、 循环结构
for循环
for(表达式1;表达式2;表达式3)
{
循环体;
}

省略表达式1:需要在for循环前加一个初始值。
省略表达式2:会成为死循环。
省略表达式3:将变量的变化再循环体内实现。
while循环和do…while循环
while(表达式) do
{ {
循环体; 循环体;
} }while(表达式)
While循环先判断条件再执行循环体,do…while循环先执行在判断循环体。直到表达式为假,停止循环。因此while至少执行0次,do…while至少执行1次。
break和continue
都用于跳出循环。
Break彻底跳出循环;continue只跳出本次循环,继续下一次循环。
goto无条件跳转
无条件跳转语句(不推荐使用)。
goto 标号;
标号:
数组
一组数据类型相同的的元素组在一起
特点:1、数据类型相同。2、地址连续。
数组名作用:
1、 代表整个数组。
2、 代表数组首元素的地址。
一维数组
存储类型:auto、registrt、static、extern;
数据类型:数组中元素的数据类型。
数组的数据类型:int [5];
数组所占的内存空间的大小:sizeof(数据类型)元素个数
一维数组的初始化:一维数组的初始化分为,部分初始化和全部初始化。
无初始化,里面所有元素的值为随机值。
部分初始化可以用于对数组进行清零操作。
全部初始化时一维数组的元素个数可以省略。
字符数组
C语言中字符串的保存只能通过字符数组进行保存。
Char str[10]={‘\0’};字符串清零
字符数组的数组名就是数组首元素地址。
字符数组的获取scanf(“%s”,str);gets(数组名);
字符串处理函数
Strlen(数组名);返回值为字符串的实际长度。
Strcpy(数组1,数组2/字符串);将字符串2的内容复制到字符串1中。
Strcat(数组1,数组2/字符串);将字符串2的内容接在字符串1后。
Strcmp(数组1/字符串1,数组2/字符串2);按位比较两个字符串的ASCII值。
返回值大于0:字符串1>字符串2
等于0:字符串1=字符串2
小于0:字符串1<字符串2
scanf与gets的先后问题
当scanf位于gets函数前获取数值时,因scanf函数在获取数据后会在缓冲区留下一个输入的标志操作,而gets函数会直接从缓冲区取数据,因此会出现gets函数无法获取想要的数据。
解决办法:1、使用两个相同的输入函数两个scanf或两个gets。
2、scanf函数放于gets函数后,因scanf在接收数据时会检查缓冲区。
二维数组
元素为一维数组的数组。
二维数组的行数:一维数组的个数。
二维数组的列数:一维数组中元素的个数。
二维数组实际元素的个数:行数
列数。
数据类型:数组最里面的元素的数据类型。
无初始化,里面所有元素的值为随机值。
部分初始化可以用于对数组进行清零操作。
全部初始化时二维数组的行数可以省略,但列数不可省略。
二维字符数组
行数:字符串的个数。
列数:字符串中字符的个数。
数组的访问
一维数组:数组名[下标]
二维数组:数组名[行数][列数]
都是从0开始
函数
库函数
printf、scanf、strlen……
库函数调用时,需要引入头文件。
函数的调用
函数名(参数);
自定义函数
存储类型:static、extern。
数据类型:返回值的数据类型。
参数设置:形参的类型需要与需要传的实参相同。
返回值:程序员设定,默认为int。
自定义函数调用结束后,其所分配的空间会被释放。
若自定义函数写在主函数后,需要在主函数前进行定义,才能正常使用,否则容易出现程序有错编译器无法识别。
指针
指针是一种存储地址的数据类型。
数据类型:指针所指向的元素的数据类型。
指针的数据类型:去掉变量名剩下的部分。
指针变量的数据大小为4字节。
什么是地址
地址的本质:内存单元的编号。
指针:指针就是地址。
指针的本质:内存单元的编号。
指针的赋值
指针的赋值相当于改变指针所指的地址。其所指向的数据类型必须相同。
空指针
指向零号地址的指针,用于指针的初始化。
零号地址禁止操作。
野指针
不知道指向哪里的指针,局部变量。必须尽量避免。
二级指针
指向一级指针的指针,指针的指针。
指针的算术运算
指针+n:指针的指向向变大的方向移动n个数据。
指针-n:指针的指向向变小的方向移动n个数据。
指针1-指针2:所得值为两个指针之间的数据个数。
指针和数组的关系
指针变量和一维数组
数组名为数组首元素的地址,是一个指针常量,不可以进行自加自减。
通过与数组名数据类型相同的指针可以实现对数组的访问。
int *p;int a[];p=a;
(a+i)=a[i];(p+i)=p[i];
在使用指针时,需要时刻注意指针的指向。
指针与二维数组的关系
Int a[][];
a、&a、a[0]、&a[0]、a[0][0]数值相同,但表示的意义不同
数组指针与指针数组
数组指针:指向数组的指针。例:Int(p)[3];
一般不操作一维数组,容易产生越界。
指针数组:存储一定个数的指针的数组。Int
p[3];

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值