随笔分类 -  C语言

摘要:作用域:一个变量或者函数起作用的范围 生命周期:一个变量什么时候被释放 static关键字:修饰局部变量、修饰全局变量、修饰函数 1.局部变量的作用域 局部变量的作用域是离他最近的一个代码块,比如函数体的大括号、if for while循环体的代码块。超出这个代码块则无法访问。 1 #include 阅读全文
posted @ 2020-06-30 20:09 薛定谔的小灯泡 阅读(809) 评论(0) 推荐(1) 编辑
摘要:C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数,这点和函数有些类似。就像把函数的实参传递给形参。 对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。 带参宏定义的一般形式为: #define 宏名(形参列表) 字符串在字符串中含有各个形参。 带参宏调用的 阅读全文
posted @ 2020-06-29 17:03 薛定谔的小灯泡 阅读(489) 评论(0) 推荐(1) 编辑
摘要:一个程序的运行是需要内存的,那么我们平常写的程序的内存都是怎么分配的呢 (1)首先我们要知道,内存是真实存在的,内存是一个物理器件。它时由操作系统管理的,我们平常只要使用它就行了,为了方便管理。操作系统提供了很多种机制来管理内存,每一种机制都有其特点。(2)三种内存来源:栈(stack)、堆(hea 阅读全文
posted @ 2020-06-29 16:56 薛定谔的小灯泡 阅读(599) 评论(0) 推荐(0) 编辑
摘要:1.位与 & (1)位与符号是&,按照一个数的二进制位按位与。(2)位与的真值表:1&1=1,1&0=0,0&1=0,0&0=0. 举个例子:两个二进制数分别是 10101010、01111010。所谓位与就是二进制的每一位进行与,即要想把两个数(十进制、十六进制等)进行位与,必先把其转化为二进制数 阅读全文
posted @ 2020-06-28 18:50 薛定谔的小灯泡 阅读(318) 评论(0) 推荐(0) 编辑
摘要:用宏置位、复位。 1 // 把x的第n位置一 2 #define SET_NTH_BIT(x, n) (x | ((1U)<<(n-1))) 3 4 //把x的第n位清零 5 #define CLEAR_NTH_BIT(x, n) (x & ~((1U)<<(n-1))) 6 7 //把x的n-m位 阅读全文
posted @ 2020-06-28 18:43 薛定谔的小灯泡 阅读(485) 评论(0) 推荐(0) 编辑
摘要:由我们写好的源代码到CPU可以认识并执行的二进制中间经过很多步骤。 1.从源代码到可执行程序的过程 (1)源代码.c文件先经过预处理器,生成一个中间文件.i文件 (2).i文件经过编译生成汇编.s文件 (3).s的汇编文件经过汇编器生成.o的目标文件 (4).o的目标文件经过链接器生成.elf可执行 阅读全文
posted @ 2016-07-15 20:34 薛定谔的小灯泡 阅读(152) 评论(0) 推荐(0) 编辑
摘要:typedef是一个关键字,可以重命名一些数据类型也可以重定义一些新的数据类型。我们从以下几个角度去理解typedef。 1.typedef和普通数据类型类型 typedef int MYINT; int a = 10; MYINT B = 20; 我们给int重命名成MYINT,这时候 int 和 阅读全文
posted @ 2016-07-02 17:55 薛定谔的小灯泡 阅读(182) 评论(0) 推荐(0) 编辑
摘要:在Linux 内核中经常看见,数组指针,指针数组,函数指针等,这些都是C语言的高级语法,之前我们了解了数组指针和指针数组,在学习他们的过程中使用逐层分析的方法,这回我们使用这个方法再来学习函数指针。 1.函数指针是什么? 1.1.概念理解 (1)函数指针、数组指针、普通指针之间并没有本质区别,区别在 阅读全文
posted @ 2016-07-02 17:49 薛定谔的小灯泡 阅读(93) 评论(0) 推荐(0) 编辑
摘要:这片文章介绍二维数组int a[ i ] [ j ]中的符号:a,&a[ i ],&a[ i ][ j ],a[ i ][ j ],&a[ i ] [ j ]的含义,重点在后面第二部分的分析,但是前面第一部分的复习数组指针,指针数组和二维指针是前提,前面的不会,后面的没法理解。这片文章写的有些费劲, 阅读全文
posted @ 2016-06-30 20:31 薛定谔的小灯泡 阅读(121) 评论(0) 推荐(0) 编辑
摘要:数组指针和指针数组分析 1.概念区别 1.1.数组指针: 也就是数组的指针。一个指针,它指向一个数组。 1.2.指针数组: 也就是指针 的数组。一个数组,里面的元素都是指针。 2.指针和数组分别定义的符号 2.1 int * p; 分析: 第一步:找核心,核心是p。 第二步:逐层剥离,p和*结合是指 阅读全文
posted @ 2016-06-30 20:24 薛定谔的小灯泡 阅读(179) 评论(0) 推荐(0) 编辑
摘要:这篇文章主要介绍sizeof( )运算符的用法 1. sizeof() 和 strlen() (1) sizeof()是一个运算符,如同加减乘除,返回数据类型或者变量的内存大小。 (2) strlen()是一个C库函数,返回字符串的长度。 2.char str[] = “hello” sizeof( 阅读全文
posted @ 2016-06-21 21:43 薛定谔的小灯泡 阅读(162) 评论(0) 推荐(0) 编辑
摘要:1.什么是数据类型?数据类型的作用是什么? int a = 10; int数据类型规定了变量a的大小的存储方式。数据类型就只有两种作用,内存那么大,如何进行分配使用,都是靠数据类型。 int short char 数据类型的存储方式相同,只是所规定的内存大小不同,而float 和double和他们都 阅读全文
posted @ 2016-06-21 21:38 薛定谔的小灯泡 阅读(235) 评论(0) 推荐(0) 编辑
摘要:1.从内存和编译器角度来理解数组 1.1内存角度和编译器角度 (1)定义五个变量,普通定义int a,b,c,d,e;和数组定义int a[5]; 1.都是定义了五个变量,第一种方法定义的变量的内存地址不一定是连续的,第二种方法定义的元素一定是地址连续的。 2.对于编译器来说,定义数组和定义其他变量 阅读全文
posted @ 2016-06-17 21:17 薛定谔的小灯泡 阅读(95) 评论(0) 推荐(0) 编辑
摘要:const关键字定义的变量 #include<stdio.h> int main( void ) { const int a = 10; a = 20; } 结果怎样? 编译错误 [Error] assignment of read-only variable ‘a’ 变量a是只读的。 得到一个结论 阅读全文
posted @ 2016-06-14 23:02 薛定谔的小灯泡 阅读(167) 评论(0) 推荐(0) 编辑
摘要:什么是野指针?通过一段代码来体会一下。 #include<stdio.h> int main(void) { int * p ; *p = 314; printf("*p = %d\n",*p); } 看看打印的值是多少?是314吗? 程序运行出错了,为什么?回想一下局部变量的特点:1.分配在栈上, 阅读全文
posted @ 2016-06-14 22:52 薛定谔的小灯泡 阅读(108) 评论(0) 推荐(0) 编辑
摘要:指针和普通变量的一样,本质没有区别,指针的本质就是变量。指针全名就是指针变量。 1.什么是指针? #include<stdio.h> int main(void) { int a = 0; float b = 3.14; char c = 'a'; } 分析: 变量 a 的数据类型是int,a存放整 阅读全文
posted @ 2016-06-06 19:53 薛定谔的小灯泡 阅读(423) 评论(0) 推荐(0) 编辑
摘要:关于位运算的几个题 1.给一个整形数a,设置a的bit3,保证其他位不变 分析: 第一步:设置 a 的 bit3 a | = 1<<3 2.给一个整形数a,设置a的bit3-bit7,保证其他位不变 分析: 第一步:从bit3 -bit7共5位 ,先设置bit0-bit4 第二步:bit0-bit4 阅读全文
posted @ 2016-05-30 22:39 薛定谔的小灯泡 阅读(274) 评论(0) 推荐(0) 编辑
摘要:如何构建寄存器中特定二进制数 在stm32中寄存器按照位进行操作。寄存器的每一位都是不同的功能,如何给特定的一位写入值而不改变其他位?在stm32中这些都是通过位运算来完成的。 1. 给寄存器特定位置1,请零或者取反,之前我们知道了,我们只需要写出一个特定数来再和寄存器中原来的数进行位运算即可。 举 阅读全文
posted @ 2016-05-17 20:49 薛定谔的小灯泡 阅读(221) 评论(0) 推荐(0) 编辑
摘要:寄存器读写为什么需要用位操作符 1.寄存器操作的要求(特定位改变而不影响其他位) (1)arm是统一编址的,arm中有很多内部外设,soc通过向这些内部外设的寄存器写入一些特定的值来完成操作。这个内部外设进而操控硬件,所以说读写寄存器就是在操控硬件。 (2)在设定特定位时不改变其他位,而且寄存器的特 阅读全文
posted @ 2016-05-09 17:55 薛定谔的小灯泡 阅读(480) 评论(0) 推荐(0) 编辑
摘要:一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意 阅读全文
posted @ 2016-04-25 23:18 薛定谔的小灯泡 阅读(189) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示