自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 24、指针的本质

变量代表一段内存的别名,但并不是只能通过变量才能访问一段内存了,指针也可以1、 号的意义*在指针声明时,* 号表示所声明的变量为指针在指针使用时,* 号表示取指针所指向的内存空间中的值指针 p 里面存放的是变量 i 的地址,*p 表示取变量 i 的值。p = &i;*p = i;为什么指针的大小占用为4个字节?因为如果系统是32位,地址寻址范围为4个字节,所有的3...

2019-06-27 11:57:24 291

原创 23、# 和 ## 操作符使用分析

1、# 运算符#运算符用于在预处理期将宏参数转换为字符串#的转换作用是在预处理期完成的,因此只在宏定义中有效编译器不知道# 的转换作用用法 : #define STRING(x) #x printf(“%s\n”,STRING(Hello World !));#include <stdio.h>#define STRING(x) #xint main(){...

2019-06-27 10:25:38 167

原创 22、#pragma使用分析和内存对齐分析

1、预处理器指示字 #pragma 简介#pragma 用于指示编译器完成一些特定的动作#pragma 所定义的很多指示字是编译器特有的#pragma 在不同的编译器间是不可移植的— 预处理器将忽略它不认识的 #pragma 指令— 不同的编译器可能以不同的方式解释同一条 #pragma 指令一般用法: #pragma parameter注:不同的 parameter 参数语...

2019-06-26 15:50:41 1357

原创 21、#error 和 #line 使用分析

#error的用法— #error 用于生成一个编译错误信息— 用法 #error message(message不需要双引号,是一个语句)包围#error 编译指示字用于自定义程序特有的编译错误信息,类似的,#warning用于生成编译警告#error 是一种预编译器指示字#error 可用于提示编译条件是否满足...

2019-06-26 10:45:10 182

原创 20、条件编译

条件编译就是宏定义加上预处理的应用,作用在于同一份代码产生不同的产品1、基本概念— 条件编译的行为类似于C语言的 if…else…— 条件编译是预编译指示命令,用于控制是否编译某段代码#include <stdio.h>#define C 1int main(){ const char* s; #if(C == 1) s = "This is first pri...

2019-06-25 17:54:02 288

原创 19、宏定义使用分析

宏开始给我的两个印象:1、可以用来定义常量 2、定义代码块1、C语言中的宏定义— #define 是预处理器处理的单元实体之一— #define 定义的宏可以出现在程序的任意位置— #define 定义之后的代码都可以使用这个宏2、定义宏常量— #define 定义的宏常量可以直接使用— #define 定义的宏常量本质为字面量#include <stdio.h>#...

2019-06-25 13:58:30 223

原创 18、编译过程简介

编译器—— 预处理器 → file.i(中间代码)—— 编译器 → file.s(汇编文件)—— 汇编器 → file.o (二进制文件)—— 链接器♦ 预编译— 处理所有的注释,以空格代替— 将所有的 #define 删除,并且展开所有的宏定义— 处理条件编译指令 #if,#ifdef,#elif,#else,#endif— 处理 #include ,展开被包含的文件— ...

2019-06-25 10:57:22 92

原创 17、三目运算符和逗号表达式

1、三目运算符a ? b : c //a为真,返回b;a为假,返回c注:三目运算符不能作为左值使用,三目运算符最终返回的是一个值,而不是一个变量,如果作为左值使用,那就是两个常数相互赋值,明显错误。因此三目运算符可以作为右值使用。#include <stdio.h>int main(){ int a = 1; int b = 2; int c = 0; ...

2019-06-24 17:53:07 262

原创 16、++、- - 操作符的本质

1、一个头疼的问题#include <stdio.h>int main(){ int i = 0; int r = 0; r= (i++) + (i++) + (i++); printf("i = %d\n", i); printf("r = %d\n", r); r = (++i) + (++i) + (++i); printf("i = %d\n", i)...

2019-06-24 16:55:05 186

原创 15、位运算符分析

C语言中的位运算符位运算符直接对 bit 位进行操作,其效率最高。(1)左移、右移运算符注意点—— 左操作数必须为整数类型char、short是左操作数的类型时, 会被隐式转换成 int 后进行移位操作—— 右操作数的范围必须为 [0,31]—— 左移运算符 << 将运算数的二进制位左移规则:高位丢弃,低位补0—— 右移运算符 >> 将运算数的二进制位右移...

2019-06-24 15:05:20 628

原创 14、逻辑运算符

11

2019-06-24 13:42:05 325

原创 13、C语言中的单引号和双引号

—— C语言中的单引号用来表示字符字面量—— C语言中的双引号用来表示字符串字面量‘a’表示字符字面量,在内存中占一个字节,‘a’+1表示‘a’的ASCII码加1,结果为‘b’。“a”表示字符串字面量,在内存中占两个字节,“a”+1表示指针运算,结果指向“a”结束符‘\0’分析:下面这段程序合法吗?char* p1 = 1; //0x00000001char* p2 ...

2019-06-24 12:02:43 22475 1

原创 12、接续符和转义符

1、接续符—— C语言的接续符(\)是指示编译器行为的利器#in\clud\e <st\dio.h>in\t m\ain(\){pri\ntf\ (\ "Hello D.T.\n" )\ ;ret\urn 0;}把接续符去了之后#include <stdio.h> int main(){ pr...

2019-06-23 18:12:09 222

原创 11、C语言注释

先来看一个程序:#include <stdio.h>int main(){ int/*...*/i; char* s = "abcdefgh //hijklmn"; //Is it a \ valid comment? in/*...*/t i; return 0;}这个程序很容易让人分析错误...

2019-06-23 16:35:24 149

原创 10、enum、sizeof、typedef 分析

1、enum分析(枚举)—— enum是C语言中的一种自定义类型(类似于struct和union)—— enum值是可以自定义的整形值—— 第一个定义的enum默认为0—— 默认情况下的enum值是在前一个定义值的基础上加1—— enum类型的变量只能取定义时的离散值#include <stdio.h>enum color{ red, green = 2, ...

2019-06-23 11:56:12 232

原创 9、const 和 volatile 分析

const分析1、const的分歧const修饰的变量是只读的,本质上还是变量,不是常量。只读的意思在我看来,就是变量只能出现在在赋值符号的右边。const修饰的局部变量依旧存储在栈上,只不过是read only的,(只读的意思在我看来,就是只能在赋值符号的右边。)所以一般的赋值不能改变它的值,但是指针运算可以修改它的值。const修饰的全局变量依旧存储在全局数据区,也就是在全局变量本身呆...

2019-06-19 22:06:38 245

原创 8、void 的意义

1、void 修饰函数代表没有参数和没有返回值2、void不是实际的类型,而是一种抽象的类型。不能用void定义变量,但是可以用void 定义指针。比如:void a; //errorvoid p[5]; //error void *p; //正确可以定义void 类型的指针,因为指针都是固定4Byte(win32)...

2019-06-19 20:34:04 1856

原创 7、各种语句

两种分支语句1、 if…else 语句注意的点:(1)else不独立存在,总与它最近的 if 相匹配(2)变量与0比较,0应该出现在比较符号左边。(3)float型变量不能直接进行0值比较,需要定义精度2、switch…case语句(单值多分支)语法规则:switch (expression) { //别忘记大括号 case CONS...

2019-06-19 19:49:22 141

原创 6、变量属性

1、auto关键字编译器默认所有的局部变量都是auto属性。2、register关键字1)register关键字的作用请求将局部变量存到寄存器里,但不一定成功。2)register变量必须是cpu寄存器可以接受的值。3)不能用&运算符获取register的地址。因为&是取内存的地址,而register寄存器在cpu内部,cpu和内存不是一个地方。4)register不能...

2019-06-18 22:42:39 278

原创 5、类型转换

1、强制类型转换#include <stdio.h>int main(){ long l = 800; int i = (int) l; return 0;} 目标类型能够容纳目标值,结果不变。目标类型不能容纳目标值,产生截断。2、隐式类型转换(只传值,类型不发生改变)char c = 'a';int i = c; //c还是char类型,只是把值传给...

2019-06-17 22:39:18 118

原创 4、浮点数的秘密

1、浮点数在内存中的存储方式:符号位,指数位,尾数float 在内存中占4个字节,double 在内存中占8个字节。浮点数的存储是依照IEEE754标准,指数位用移码表示,尾数用原码表示,且省略1。所以float尾数位为24,double尾数位为64。对float: 指数为移码 = 011111111+偏移量对double:指数为移码 = 01111111111+偏移量例题:实数8.2...

2019-06-17 21:27:51 731

原创 3、有符号数和无符号数

有符号和无符号://不写unsigned默认为有符号的整型,只有整数类型(比如char,short,int,long)才能声明unsigned变量。一个字节能表示的最大的无符号数为:2^8-1=256-1=255 0~255一个字节能表示的最大的有符号数为:2^7-1=128-1=127 -128~127最高位为1,表明这个数为负数最高位为0,表明这个数为正数在计算机内部,用原码...

2019-06-17 16:11:25 3989 5

原创 2、基本类型

数据类型:固定内存大小的别名,用来定义变量。例如:int i sizeof(i) = sizeof(int) = 4变量:一段连续存储空间的别名。变量的内存大小取决于定义它的数据类型。sizeof :返回类型或对象占的字节大小。typedef :自定义数据类型。例如typedef int INT32 INT32就是和int相同功能的数据类型...

2019-06-17 15:15:46 126

原创 1、结构体、柔型数组以及union

结构体:用户自己建立不同数据类型组成的组合型的数据结构。struct student {成员列表};struct student student1;// struct为声明结构体类型的关键字,student为结构体名// struct student 为一个结构体类型// student1为struct student 类型的变量或者在定义结构体类型的同时定义结构体变量:...

2019-06-17 15:15:08 539

321312312313

3213123213123

2024-09-12

FS65SBC-SDK-SW.zip

FS65SBC-SDK-SW.zip

2024-08-29

GTM_ATOM_PWM_DTM_Synchronize_KIT_TC364_TRB.zip

GTM_ATOM_PWM_DTM_Synchronize_KIT_TC364_TRB.zip

2024-06-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除