C语言小知识点


C语言中函数是管理代码的最小单位,一个函数就是一个功能的实现
main函数是程序的入口,有且只有一个


C从源文件->可执行文件过程:
1.预处理 -E 生成.i预处理文件
2.编译 -S 生成.s汇编文件
3.汇编 -c 生成.o目标文件
4.链接 gcc x.o 生成a.out可执行文件


signed 有符号(数据默认为有符号型) 
二进制最高位作为符号位 0正数 1负数
类型名            字节数         数据范围
signed char       1             -128~127
signed short      2             -32768~32767
signed int          4            正负20亿
signed long       4(32位)/8(64位)
signed long long 8 正负9开头19位整数
注意:signed不加就代表加了


类型占位符:C语言通过占位符的方式传递变量的类型,(char想要显示成整数时:%hhd ;想要显示成字符时: %c)
signed       char    short    int   long    long long
               %hhd     %hd   %d   %ld     %lld
unsigned %hhu    %hu   %u   %lu    %llu
float %f        double %lf        long double %LF
字符型:char %c


数据的格式化输出
%nd 显示n个字符宽度,不足时补空格,右对齐
%-nd 显示n个字符宽度,不足时补空格,左对齐
%0nd 显示n个字符宽度,不足时补0,右对齐
%n.mf 显示n个字符宽度(小数点也算一位),不足时补空格,右对齐,m表示小数点后显示的位数(四舍五入)
%g 不显示小数点后多余的0


在C代码中,以0开头的数据是八进制数据,以0x/0X开头的是十六进制数据
%x 让数据以十六进制显示
%o 让数据以八进制显示
%#x %#o 显示出数据对应的进制前缀


原码:二进制 最高位为符号位,(0正1负)
反码:正数为原码,负数:原码符号位不变,其他按位求反
(所有数据的存储方式都是补码)
补码:正数为原码,负数:反码+1


整数/整数 只保留整数部分
/ % 除数不能为0,否则会在运行时出现浮点数例外(核心已转储)
% 不能对浮点数求余


运算符优先级:
() [] ->
! ~ ++ -- + - * & sizeof ←
* / %
+ -
<< >>
< <= >= >
== !=
&
异或
|
&&
||


位运算符:&    |    ~     ^    <<(左移右边补0)    >>(右移左边补符号位) 位运算符,必须转换成二进制补码再进行运算


自动类型转换:
转换规则:以不丢失数据为基础,可以适当地牺牲一些空间
1、字节少的向字节多的转
2、有符号的向无符号的转
3、整型向浮点型转


swtich不可以与continue配合
在for循环内定义变量,只能在for内使用,出了for后无法使用
for循环内定义的变量,会屏蔽循环外定义的同名变量


break
1、在switch中关闭case开关
2、跳出循环,但如果有循环嵌套时,只能跳出最近的一层循环
continue
结束本次循环,直接进入下一次循环
return
1、返回一个返回值给函数的调用者
2、提前结束函数,程序回到调用位置继续执行


数组:变量的组合,是一种批量定义相同类型变量的方式
定义: 类型名 数组名[数量]; int arr[5];
注意:数组的长度一旦确定,无法改变
使用:数组名[下标];
下标:从0开始,范围:0~数量-1
初始化:
类型名 数组名[数量] = {1,2,3,4,...};
1、数组与变量一样,默认值随机,所以一般都要先初始化
2、数组不能整体初始化,只能逐个初始化 int arr[20]=0 false
3、这种初始化的语法只能在定义数组时使用
4、初始化数据过多,编译器会产生警告并丢弃
5、初始化数据不足,编译器会自动补0
6、初始化数据可以全部省略,只写大括号,相当于全部成员初始化为0
7、如果有初始化数据,则可以省略数组数量,因为编译器会自动统计数据的个数,然后确定数组的数量
计算数组的总字节:sizeof(arr)
计算数组成员的字节数:sizeof(arr[0])
计算数组长度的公式:sizeof(arr)/sizeof(arr[0])

数组越界的后果:

1、一切正常
2、段错误(核心已转储)
3、脏数据

变长数组:定义数组时,使用变量作为数组的长度,这种数组称为变长数组
特点:在代码编译期间数组的长度是不确定的,当执行到数组的定义语句时长度才最终确定下来,并且一旦确定长度也无法改变
初始化发生在编译期间,而可变长数组长度的确定发生在运行期间,因此可变长数组无法初始化。

posted @ 2023-07-25 20:21  冲他丫的  阅读(76)  评论(0)    收藏  举报