自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

felicity_one的博客

嵌入式学习过程中遇到的种种基情与心情

  • 博客(15)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 存储类型

2.存储类型:是指变量占用内存空间的方式,也称为存储方式。变量占据内存空间的类型分为静态和动态两种。静态:程序开始执行时分配存储空间,直到程序运行结束收回其内存;动态:程序运行过程中用到时才分配内存空间,到其作用域之外时,收回其内存。自动变量(auto)和寄存器变量(register)属于动态存储方式,外部变量(extern)和静态变量(static)属于静态存储方式。自动

2016-05-28 15:26:51 1312

原创 作用域

1.作用域:是指标识符的有效范围,变量的有效范围称为变量的作用域,所有的变量都有自己的作用域,作用域的范围由说明方式决定。VC++中作用域可以分为块作用域、文件作用域、函数原型作用域、函数作用域和类作用域。变量主要分为局部变量和全局变量。块作用域:用一对花括号括起来的一部分程序称为一个块。在块内定义说明的变量,其作用域仅限于块内,离开该块后再使用该变量是非法的。具有块作用域的变量是局部变量。

2016-05-28 15:26:13 466

原创 预处理命令

1.预处理命令:C程序的源代码中可以包括各种编译指令,这些指令称为预处理指令。虽然它们不是C语言的一部分,却扩展了C程序设计的环境。预处理命令都是以"#"开头的,ANSI标准定义的C语言预处理程序有:#define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#pragma.在源程序中这些命令都放

2016-05-28 15:25:11 1052

转载 C/C++源代码到可执行程序的过程详解

C/C++源代码到可执行程序的过程详解编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。源代码-->预处理-->编译-->优化-->汇编-->链接-->可执行文件Source--(编译)--> Assembly--(汇编)-->Obj--(链接)

2016-05-23 11:20:33 1545

原创 枚举enum

21.枚举enum:在C语言中其实就是一些符号常量集。直白点说:枚举定义了一些符号,这些符号的本质就是定义int类型的常量,每个符号和一个常量绑定。这个符号就表示一个自定义的一个识别码,编译器对枚举的认知就是符号常量所绑定的那个int类型的数字。枚举符号常量和其对应的常量数字相对来说,数字不重要,符号才重要。符号对应的数字只要彼此不相同即可,没有别的要求。(这些数字是让编译器自动分配的:原则是

2016-05-22 21:39:44 686

原创 大小端模式

19.大小端模式大端模式(big endian)和小端模式(little endian)。在我们发送数据的时候,我们首先要确定是大端还是小端模式来进行的,在接收方接收的数据必须知道数据是大端还是小端模式,才能正确地读取和存储数据起来,否则就会出错。一个32位的二进制在内存中的存储时有2中分布方式:高字节对应高字节(大端模式)、高字节对应低地址(小端模式)。有些时候CPU公司用大端(

2016-05-22 21:39:06 6589 3

原创 共用体union

18.共用体union:就是对同一块内存中存储的二进制的不同理解而已。1.结构体类似一个包裹,结构体中的成员彼此是独立存在的,分布在内存的不同单元中,它们只是被打包成一个整体叫做结构体而已;结构体的变量是同时存在的;但是共用体不是这样,共用体中的各个成员其实是一体的,在这么多个成员中,同一时刻只能是其中的某一个成员存在,有时候是这个元素,有时候是另外一个元素,也可以理解为在同一个空间里,这时刻

2016-05-22 21:38:33 386

原创 container_of宏

17.container_of宏这个宏的是根据传进去的结构体中的某个成员的指针来返回该结构体的首地址,以后我们就可以通过结构体的首地址来方便访问该结构体中的任何成员了。这个宏工作的原理:先用typedef得到member元素的类型定义成一个指针,然后用这个指针减去该元素相对于整个结构体变量的偏移量(偏移量用offsetof宏得到的),减去之后得到的就是整个结构体变量的首地址了,再把这个地址

2016-05-22 19:29:30 387

原创 offsetof

16.offsetof宏#define offsetof(TYPE,MEMBER) ((int) &((TYPE *)0)-> MEMBER)上式是offsetof的定义式,其中TYPE是结构体变量类型,MEMBER是结构体中的成员,返回的是该成员的地址相对结构体首地址的偏移量。offsetof宏的原理:我们虚拟一个type类型结构体变量,然后用type.member的方式来访问哪个m

2016-05-22 19:28:44 528

原创 结构体对齐访问

14.结构体的对齐访问:用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列,而不是简单地顺序排列,这就是内存对齐。许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的起始地址的值是某个数K的倍数,这就是所谓

2016-05-22 19:27:48 433

原创 二维数组

34.二维数组:一维数组在内存中是连续分布的多个内存单元组成的,而二维数组在内存中也是连续分布的多个内存单元组成的,从内存的角度来看二者是没有本质区别的,只是一维数组和二维数组的管理方式不一样而已。二维数组和一维数组在内存使用效率、访问效率上是完全一样的,但是在某些情况下使用二维数组更好理解,代码更好写,更利于组织。使用二维数组并不是必须的,而是一种简化编程的方式。数组有两种访问方式:下标

2016-05-20 10:16:00 348

原创 二重指针

33.二重指针二重指针和一重指针在本质上都是指针变量,指针变量的本质都是变量。指针变量本身都占4字节内存空间。在我PC机上指针类型变量占8个字节。/**************************二重指针******************************/char **p1; //二重指针char *p2; //一重指针printf("sizeof(p

2016-05-20 10:14:57 825

原创 typedef

30.typedefC语言中的两种类型:内建类型(编译器自带类型):ADT,用户自定义类型:UDT注意:typedef关键字定义(重命名)的是类型而不是变量。类型是一个模板,可以用来定义很多该类型的变量,没有被分配内存的,而变量是占内存的。typedef char * pChar; //typedef 类型原型 新名字#define pChar char * //#define 新

2016-05-20 10:13:14 417

原创 函数指针实战

25.函数指针的实战。用函数指针指向不同的函数来实现同一个调用执行不同的结果,类似C++或Java语言等面向对象的语言的多态一样。下面是一个简单的计算机程序:/*#include typedef int (*pType)(int , int );int add(int a, int b){return (a + b);}int sub

2016-05-20 10:11:48 344

原创 C语言基础

1.int, float, double这三种类型是不兼容的。2.int, short, char这三种类型兼容。相互转换的时候可能错也可能对。如char 和int之间的转换,当数值是在char所表示的范围之内的时候就不会出错,但是若是超过了char的范围后就会出错。3.所有指针类型(int *, double *, char *,,,)的解析方式都是相同的,都是将所占的4个字节的32个二

2016-05-20 10:10:06 617

空空如也

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

TA关注的人

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