玩儿转C语言
文章平均质量分 62
杨过爱喝哇哈哈
积极主动,乐观勇敢,无畏突破,享受过程,沟通突破
展开
-
匿名结构体/联合体(#pragma anon_unions)
之所以要使用这个东西,是因为在gcc编译器中是支持匿名结构体/联合体的使用的,而在ARMCC中不支持,所以如果要在ARMCC中使用匿名的结构体/结合体,就需要使用 #pragma anon_unions 告知编译器,不然会编译不通过。匿名结构:在另一个结构中声明结构变量,而无需为其命名的嵌套结构称为匿名结构。匿名结构体/联合体指的是没有命名的结构,因为没有对应的名字,所以也不会直接创建这个对象或者变量,一般都是在嵌套结构中使用。常规用法中,会层层递进来操作内部结构体中的变量,例如上图中的P.bit.C。转载 2024-04-19 11:56:18 · 635 阅读 · 0 评论 -
玩儿转C语言:指针(易错点、多级指针和数组相关)
玩儿转C语言:指针(易错点、多级指针和数组相关)原创 2019-05-30 14:31:27 · 230 阅读 · 1 评论 -
玩儿转C语言:指针(表达式和声明类型)
玩儿转C语言:指针(表达式和声明类型)原创 2019-05-30 14:29:57 · 207 阅读 · 0 评论 -
玩儿转C语言:指针(操作)
玩儿转C语言:指针(操作)原创 2019-05-30 14:14:13 · 151 阅读 · 0 评论 -
玩儿转C语言:指针(思考、本质及概念)
玩儿转C语言:指针(思考、本质及概念)原创 2019-05-30 13:49:07 · 201 阅读 · 0 评论 -
玩儿转C语言:bit 位域大小端转换及传输
注:这篇文章在c语言的位结构体定义上,以及内部存储和通信传输上介绍了很多,转载保存以备查看!计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然转载 2016-05-31 18:27:07 · 3507 阅读 · 1 评论 -
玩儿转C语言:系统内存模型之实模式和保护模式
要想对C语言有一个深入的理解,就不得不说它赖以生存的环境,这里简要介绍一下系统内存模型。内存模型,就不得不说业界知名的Wintel联盟,到底是谁选择了谁?又是谁成就了谁?反正已成事实鬼才知道!1、Intel 80x86系列处理器关于Intel X86家族的发展历史这里不想赘述,无非就是:字长越来越大(4位 -> 8位 -> 32位 -> 64位);频率越来越快(30MHz -> 600原创 2013-07-06 12:53:09 · 2757 阅读 · 2 评论 -
玩儿转C语言:字符和字符串
在C语言中,利用单引号和双引号分别表示字符和字符串,字符串是指一串以NUL字节结尾的零个或多个字符。因为字符串通常存储在字符数组中,所以C语言中不存在字符串类型。但在使用时,如果不能真正理解两者的本质区别,有可能会出现一些诡异的现象。下面我将通过实验,进行详细分析:1、字符特性试验,代码如下:char ch_1 = 'a';char ch_2 = 'abcd';int ch_va原创 2012-11-27 23:54:02 · 46166 阅读 · 8 评论 -
玩儿转C语言:常见复合类型的声明--注意事项
1、结构体struct声明注意事项 结构的定义后面可以直接跟变量名,表示这些变量的类型是这个结构。例如:struct { *** } vol, rate ;这样就定义了两个结构体变量vol和rate。理解:跟基本类型变量的定义“ int number ”本质相同 ,可以认为 struct { *** } 就类似于系统内部类型定义int,只是类型不同而已。 缺点是:无原创 2012-12-01 16:12:34 · 1664 阅读 · 0 评论 -
玩儿转C语言:数组和指针(2)
前面讲的都是数组的基本属性,这里我们再深入一步对多维数组进行分析,讨论一下数组和指针之间的前世今生,呵呵!1、通过指针反向分析多维数组,代码及结果如下:分析: 刚开始,建立了一个新的用户类型:指针类型,该指针指向一个拥有3个整型元素的数组。 如何理解“数组名称其实就是指向第一个数组元素的地址”?“数组元素又该如何解释”? 一维数组ar原创 2012-11-29 09:44:45 · 1985 阅读 · 2 评论 -
玩儿转C语言:声明和定义(1)
1、如何解释声明和定义,它们有何区别? C语言中,某一模块内部的数据对象只能有一个定义,可以有多个extern声明。 定义是一种特殊的声明,它负责创建一个对象并分配空间。 声明告诉编译器对象的类型和名字,对象的内存分配在别处进行,无需再定义就可直接使用。 它们的本质区别是:是否分配内存空间,定义需要分配空间,声明不需要分配空间。2原创 2012-12-13 19:35:14 · 1628 阅读 · 1 评论 -
玩儿转C语言:符号和字符(1)
编译原理中讲到程序构造的一般过程是:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。词法分析对应的就是C语言中的“单词”(也称“符号”),指的是程序的一个基本组成单元,每个符号都有自己固定的字符序列,但是同一个字符序列可能属于不同的符号。例如:字符序列“->”,有可能代表的是->运算符,也有可能代表字符串“->”,这就需要根据上下文环境判断。1、C语言中符号之间的空白(原创 2012-12-06 08:24:06 · 2177 阅读 · 1 评论 -
玩儿转C语言:运算符的优先级和结合性
C语言中,优先级规定了当多个运算符同时存在时表达式的求值顺序;结合性指出当多个优先级相同的运算符存在时表达式的求值顺序,可以消除歧义,优先级相同的运算符它们的结合性也一致。C语言的优先级列表如下(最新版取自:http://en.cppreference.com): 例如:1、优先级示例 num_1 = test 因为算术运算符原创 2013-01-17 22:38:17 · 3896 阅读 · 1 评论 -
玩儿转C语言:宏定义(2)
1、如何区分宏定义中的“宏名称”和“宏字符串”?对于带参数的宏又该注意什么? 在宏定义中,“宏名称”和“宏字符串”是通过“空格”来区分的,在宏的扩展中,空格会对扩展的结果造成很大的影响。编译器在处理时宏定义时,首先从“#define”后第一个空格开始读取字符串,直到遇见下一个空格为止,两个空格之间的字符串为“宏名称”,确定好“宏名称”之后,本行的所有其他字符串都为“宏字符串”。图原创 2012-12-05 00:40:36 · 4019 阅读 · 2 评论 -
玩儿转C语言:整数及相关操作
1、C语言中整数有几种进制表示方式?使用时要注意哪些问题? C语言中可以以多种进制表示整数:2进制、8进制、10进制和16进制。每个进制都有其对应的表示方式:2进制以0b开头,例如0b10111110,;8进制以0开头,例如0144表示的是10进制的100;10进制正常表达即可,不需要特殊转换;16进制以0x开头,例如0xFF表示0b11111111。实际使用中,要注意8进制和1原创 2012-12-19 00:02:52 · 3413 阅读 · 0 评论 -
玩儿转C语言:宏定义(1)
1、为什么要有宏定义? 代码中某个特定数值需要参与运算,而且该数值作用于多个地方,当需要对该数值进行修改时,希望只改动一个地方就能实现该数值的全部更新;即便某个数值只用到一次,当修改时也会面临搜索阅读大量代码、数值含义不明晰的问题;某些“操作块”封装成函数时,调用函数开销(保存上下文环境、参数调用、堆栈分配等)太大影响效率,不封装则需要多次输入相同的“操作块”内容,并且修改麻烦容原创 2012-12-03 11:21:00 · 2215 阅读 · 1 评论 -
玩儿转C语言:数组和指针(1)
C语言中,数组和指针密不可分,他们在系统内部实现上有着近乎一致的特性,只有在极少数情况下才需要人为区分,以后会讲到。1、数组特性试验,相关代码及内存状态如下:分析: 通过查看array1和array2的内存空间状态,可以看到即便是多维数组,内存空间也是扁平化分布的。在C语言中只有一维数组的概念,多维数组在系统内部也是开辟的一块平坦连续的内存空间,如果只看原创 2012-11-28 23:30:38 · 2345 阅读 · 1 评论