【C语言学习笔记】(1)
一c语言总览。1c语言被选择的原因c语言在嵌入式中为主要的高级汇编语言可直接驱动大多·数的多核心开发板。嵌入式可以嵌入多种电子设备帮助设备进行多种策略与行为。由于嵌入式设备可能没有系统环境只能运行二进制机器语言大部分需要虚拟机或解释性语言不可用c是无系统环境嵌入式芯片普片选择。2c语言相关要点环境编辑器编译器与编译流程调试器ide(Linux相关)。语法数据类型与常变量格式符转义符与运算符逻辑符数组与指针函数与结构体枚举体联合体。关键字和常用标准函数判断关键字循环关键字特殊关键字输入输出函数内存管理函数数学函数。二环境1.0 编辑器用于编辑代码的工具2.0 编译器编译工具链(gcc),2.1GCC:广泛多平台开源强高标准致性集成工具链2.2 流程及GCC参数hello.c(gcc -E)hello.i(-S).s(-C).o/.obj(gcc).exe/.out指定输出文件名使用-o参数。gcc main.c -o myprogram(不指定则默认为a.out或a.exe)编译最小单位翻译单元(Translation Unit)通常指.c源文件其包含的头文件。预处理展头文删注释替换宏理条件编译c转汇编查语法错误汇编汇编转二进制机器码链接链接多个二进制文件打包为执行文件2.3文件类型.c源文件(Source File)包含具体实现。.h头文件(Header File)包含声明、宏定义、结构体定义。常见标准头文件输入输出stdio.h内存管理stdlib.h字符串string.h数学math.h3.0 IDE包含编辑器编译器调试器图形界面等集成环境三语法。1. 0内存与数据表示 (Memory Data)1.1 存储单位位(bit)最小信息单位0或1。字节(Byte)最小寻址单位1 Byte 8 bits。换算1 KB 1024 B1 MB 1024 KB1 GB 1024 MB1 TB 1024 GB1.2 进制与转换十进制无 (如 10)二进制0b开头 (GCC 扩展)八进制0 开头 (如 012)十六进制0x 开头 (如 0xA5)ps1 位十六进制 4 位二进制 (地址常用)十转二除2取余逆序排列。二转十按位权展开求和。1.3 字节序 (Endianness)小端序(Little-Endian)低地址存低位数据(x86架构常用主机字节序)。大端序(Big-Endian)低地址存高位数据(网络传输常用网络字节序)。1.4 负数的存储 (补码)计算机内部统一使用补码进行运算。原码最高位为符号位(0正1负)其余位表示数值。反码正数同原码。负数符号位不变数值位按位取反。补码正数同原码。负数反码 1。8位有符号数范围-128~127(1000 0000~0111 1111)8位无符号数范围0~255(0000 0000~1111 1111)2.0变量2.1变量的定义被命名并存储数据的内存地址必须先定义或声明后使用在定义时指定必要的名字类型与最好要有的初始值。2.2声明修饰关键字存储类型数据类型名称初始值声明在函数外的为全局变量并全局生效函数内的为局部变量2.3变量的修饰关键字auto默认只存活本块const常量不可变static静态活全程但作用受限局部变量活全局但任函数可见全局变量或函数仅本文件可见extern全局默认外部不加与static互斥register寄存存寄存器里高频访问volatile易变只能从内存读取中断共享多线共享信号处理底层延迟signed有符号unsigne无符号Short2字节整数2.4变量类型Char1字节字符 bool布尔默认4字节整数int 4字节整数 Longlong8字节整数Float4字节小数默认格式科学计数 Double8字节小数void空四 格式符转义符与运算符逻辑1.0格式符%d(%i):有符十进%u无符十进%o八进%xX大写16进制%h短整%ll长整%f小数%[宽度].[精度]f%e科学格式%g自动判断%c字符ascll%s字符串%p地址2.0转义符\n换行 \r回车 \t 制表 \b退格 \f换页\a响铃 \v垂表 \\反斜 \单引 \双引 \?问号\0空字3.0运算符3.1计算加 -减 *乘 /除 %取余仅整数 值传递加完赋左 - 减~~~ * 乘~~~ /除~~~自增 --自减前置先加减后用后反3.2逻辑大于 大于等于 小于 小于等于 等于 !不等于与 ||或 非括弧提升优先级3.3位运算位与 |位或 ^位异或 ~取反 左移 右移abc判断a为真真b假c五 数组与指针1.0数组数组是一组相同数据类型的元素的集合这些元素在内存中是连续存储的并且通过一个唯一的数组名称和索引来访问。数组可以用来存储大量相同类型的数据避免了定义多个变量的麻烦。声明:数据类型数组名[元素个数];访问数组名[第几个元素]int a[5];int b[5]{}; int c[]{1,2,3,4,5}; a[0]0;1.1字符数组char a[5]; char a[5]{a,b,c,d,e}; char a[]abcde;//可以不指定长度psstring.h 中strlen,strcpy,strcmp函数用于处理字符串1.2二维数组int a[2][2]{{0,0}, {0,0}};ps二位数组在内存上与一维的一样是线性的2.0指针内存地址2.1内存地址ps:stdlib.h存放malloc,free,rand,atoi函数用于管理内存2.2指针的定义指针是一个变量它存储另一个变量的内存地址。变量存储在内存中每个变量占据一定的内存空间并有唯一的地址。指针就是用来存储这些地址的变量。2.3指针的声明引用运算int a0; int *pa; int arr[5] {1, 2, 3, 4, 5}; int *p arr;// p指向arr[0] //指针加法 p;// p指向arr[1]即arr[1] int arr[5] {1, 2, 3, 4, 5}; int *p1 arr[3];//指向arr[3] int *p2 arr[0];//指向arr[0] int diff p1 -p2;// diff 3表示两个元素之间有3个int的距离 if(p1p2){return 0;}//地址可以比较高地址比低地址大2.4二级指针:指针的指针简单来说就是一个存储另一个指针地址的变量。假设我们有一个普通的指针它指向某个变量的内存地址。一个指针的指针则指向这个指针的地址从而形成一种多级引用关系。int a0; int *pa; int **ppp;2.5常量指针与指针常量const int *p;//const修饰*指地址存的不变指针常量 int * const q;//const修饰变量q指指针存的地址不变常量指针2.6指针数组与数组指针int *a[5]{}//*修饰a[5]所以是数组指针指向数组的指针*(a[5]) int (*b)[]{};//*修饰的变量b然后作为同类型变量纯数组里即指针数组
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2424226.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!