自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分享

推荐大家一个靠谱的论文检测平台。重复的部分有详细出处以及具体修改意见,能直接在文章上做修改,全部改完一键下载就搞定了。怕麻烦的话,还能用它自带的降重功能。哦对了,他们现在正在做毕业季活动, 赠送很多免费字数,可以说是十分划算了!地址是:http://www.paperpass.com/...

2018-06-09 00:08:33 229

原创 错误:expected ‘)’ before ‘*’ token

今天在写代码时,又遇到 错误:expected ‘)’ before ‘*’ token说实话,这个错误不是什么大错误,一般都是什么手贱之类的多写了或少写了啥,但是我又找半天。我原先以为自己是中英符号切换错误、或是多写了空格之类的。于是,我把这一段删了又写,重复了好几遍,发现都是不是!终于想到了头文件上面,,,,我定义了一个Message的结构体,是以头文件的形式放在文件夹

2017-03-06 17:30:22 43738

原创 进程间的信号通信

1.信号通信:信号(signal)机制是Unix系统中最为古老的进程间通信机制,很多条件可以产生一个信号:(1)当用户按某些按键时,产生信号。    (2)硬件异常产生信号:除数为0,无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号。     (3)进程用kill函数将信

2017-01-21 00:17:23 403

原创 信号量

1.信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源。进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步。信号量是用来解决进程之间的同步与互斥问题的一种进程之间通信机制,包括一个称为信号量的变量和在该信号量下等待资源的进程等待队列,以及对信号量进行的两个原子操作(PV操作)。其中信号量对应于某一种资源,取一个非负的整型值。信号

2017-01-19 20:02:53 517

原创 进程间的信号通信

1.信号通信:信号(signal)机制是Unix系统中最为古老的进程间通信机制,很多条件可以产生一个信号:(1)当用户按某些按键时,产生信号。    (2)硬件异常产生信号:除数为0,无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号。     (3)进程用kill函数将信

2017-01-18 18:32:35 430

原创 共享内存

1.共享内存是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻2.看到其中的内容。共享内存实现分为两个步骤:(1)创建共享、打开共享内存,使用shmget函数。(2)映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。 (3)分离共享内存。 (4)控

2017-01-17 23:43:00 358

原创 Linux文件编程

1.系统调用:所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务。为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用

2016-12-05 22:56:41 343

原创 Linux的文件函数

1.creat: (1)函数的作用:建立,创建新文件。 (2)函数的原型:int creat (const char * pathname,mode_t mode) (3)函数的参数:pathname:要建立的文件路径字符串。如:“/home/hello.c”。                                    mode:建立文件的权限。 (4)函数的返回值:成功返回文

2016-12-04 22:16:11 709

原创 简单的通讯录(有bug)

#include <stdio.h>#include <stdlib.h>#define MAXSIZE 11 //这个最好大一点typedef struct address_book{ // int NO; char name[MAXSIZE]; char num[MAXSIZE]; struct address_book *next;}adbook;#if

2016-12-02 22:09:06 304

原创 笔试题解析2

1、下面哪种C/C++分配内存的方法会将分配的空间初始化为0?A  malloc()B calloc()C realloc()D new()(1)malloc 函数: void *malloc(unsigned int size)     在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行

2016-11-29 22:18:55 602

原创 volatile关键字的作用

举例说明: volatile int i=10; int j = i; … int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。 volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化

2016-11-28 23:05:48 284

原创 顺序表与单链表

1.数据元素之间不是独立的,存在特定的关系,这些关系即结构。所以数据结构是指数据对象中数据元素之间的关系。数据结构分为逻辑结构和物理结构。逻辑结构分为:集合结构:数据元素之间没有特别的关系,仅同属相同集合。线性结构:数据元素之间是一对一的关系。树形结构:数据元素之间存在一对多的层次关系。图形结构:数据元素之间是多对多的关系。物理结构分为:顺序存储结构:将数据存储在地

2016-11-27 22:09:23 514

原创 宏定义与条件编译

宏定义:宏定义了一个代表特定内容的标识符。预处理过程会把源代码中出现的宏标识符替换成宏定义时的值。宏最常见的用法是定义代表某个值的全局符号。宏的第二种用 法是定义带参数的宏(宏函数),这样的宏可以象函数一样被调用,但它是在调用语句处展开宏,并用调用时的实际参数来代替定义中的形式参数。像这样#define MAX(a,b) a> b?a:b  就是定义了一个宏函数。宏函数与自

2016-11-26 22:11:04 912

原创 大端小端

小端CPU:高字节保存在高地址,低字节保存在低地址。int num = 0x12345678(12是高字节,78是低字节)大端CPU:低字节保存在高地址,高字节保存在低地址。int num = 0x12345678英特尔、arm都是小端。如何判断机器的大小端?#include <stdio.h>union node{ int num; char ch;};void big_sma

2016-11-25 20:36:52 296

原创 结构体与共用体

结构体的作用: 在网络协议、通信控制、嵌入式系统的c/c++编程中,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合在一起的一个整体。其表现形式是一个结构体。简单来说,结构体就是用来封装数据的。 结构体的定义:struct student{ int num; char name[20]; char sex; int age; floa

2016-11-25 16:39:30 617

原创 函数指针与函数指针数组

函数指针与函数指针数组有什么区别呢?让我们从下面的两个例子中看看其二者之间的区别吧 eg1:#include <stdio.h>int func(int num){ printf("num = %d \n", num);}int func2(int *(p_func)(int)){ p_func(5);}int main(){ int (*p_func)(in

2016-11-25 16:17:49 365

原创 ralloc、malloc使用时的注意事项

malloc不能初始化所分配的内存空间,而函数calloc能。如果malloc函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之,如果这部分内存曾经被分配过,则其中可能遗留各种各样的数据,也就是说,使用malloc函数的程序开始时(内存还没有被重新分配)能正常进行,但经过一段时间(内存已经被重新分配,可能会出现一些问题)。calloc会将所分配的空间中的每一位都初始化为零,也就是说如

2016-11-20 22:48:51 423

原创 函数调用

函数调用的步骤:1、通过函数名找到函数入口地址。函数名是一个指针常量,保存的是函数的地址。 2、给形参分配空间。 3、传值:把实参变量对应的内存空间的值传递给形参变量的对应空间。 4、执行函数体语句。 5、函数返回并释放内存空间。什么时候传值,什么时候传址?当只读(只使用不修改)实参变量对应内存空间的值时,传实参变量名; 当写(即使用也修改)实参变量对应内存空间的值时,传实参变量对应空间的

2016-11-19 23:05:45 546

原创 数组指针与指针数组的区别

数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数

2016-11-18 23:05:48 313

原创 趣味题(求车速)

问题:一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859.两个小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?问题分析与算法设计: 根据题意,设所求对称数为i,其初值为95859,对其依次递增取值,将值得每一份分解后与其对称位置上的数进行比较,若每一个对称位置上的数皆相等,则可判断i即为所求

2016-11-17 22:53:41 2129

原创 字符串的常用函数

函数名: strlen 测量字符串的长度函数名: strcpy 复制字符串函数名: strncpy 复制字符串的前n个字符函数名:strcat 连接两个字符串函数名: strncat 将一个字符串中的前n个字符连接到另一个字符串中strcmp 比较两个字符串的大小其实我们也可以自己编写出实现上述功能的函数。#inc

2016-11-16 22:42:14 380

原创 变量存储区域的划分

计算机主要由CPU、硬盘和内存组成。而每一个程序在执行时就会产生一个进程,在Linux中,每一个进程都会有一个4G的虚拟地址空间。(以32位系统为例,Linux系统中每个进程共有3GB的用户地址空间,当用户调用系统调用时,内核线程会代表进程运行,此时是在内核空间内运行的,故所有进程共享1GB的内核空间. 所以,总的来说,每个进程可用的地址空间共有4GB)这一点对于嵌入式开发十分重要,因为在目前的计算

2016-11-15 23:11:50 2139

原创 malloc,ralloc,calloc函数的用法

(一)malloc. 原型 extern void *malloc(unsigned int num_bytes); 头文件: #include <stdlib.h> #include <malloc.h>功能: 请求系统动态分配num_bytes个字节的空间,如果分配成功则返回第一个字节的地址,并且可以进行强制类型转换,告诉系统分配空间中存储的是

2016-11-14 23:31:41 1733

原创 如何避免野指针?

何为野指针?野指针就是,没有被初始化的指针,会由系统默认一个随机地址的指针。如果不小心使用的野指针,易造成内存泄漏的段错误。给我们的程序造成一定的破坏。那么,我们该如何避免野指针呢?首先,我们该养成一些良好的编程习惯。1、当指针没有指向的地址空间是,初始化为空。这样可以引起程序员调试时的注意程度。2、当往指针指向的空间赋值时,一定要检查是否有给这个指针分配空间。如果没有,就用malloc函数进行分配

2016-11-13 21:41:37 958

原创 C语言之结构体

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct 结构体名{    结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:struct stu{    char *name;  //姓名   

2016-11-12 23:26:18 402

原创 C语言面试题1

1、下面程序会输出什么?static int a=1;void fun1(void) {a=2;}void fun2(void){ int a=3;}void fun3(void){ static int a=4;}int main(){ printf("%d",a); fun1(); printf("%d",a); fun2(); printf("

2016-11-12 00:15:31 509

原创 变量

变量的三大特点: 变量的数据类型:主要说明变量占用内存空间的大小,如int型。 变量的作用域:变量的有效性的范围,即:变量的使用范围。 变量的存储类型:变量在内存中的存储方式。不同的存储方式,,影响变量在内存中的生存周期。声明与定义: 定义: 创建一个变量,为其分配内存空间,并为它取名字(变量名),一个变量只能定义一次; 声明: 告知编译器,这个名字(变量名)已经匹配在一块内存上了,但是并

2016-11-11 00:12:24 491

原创 格式化输入(scanf)输出(printf)函数

格式化输出函数printf与格式化输入函数scanf是我们经常需要使用的函数,用来输出和输入的。 下面的例子,用来实现从键盘获取不同类型的数据并输出。#include <stdio.h>#include <stdlib.h>int main(){ int i; int j = 0; int num; char ch; long l_num; flo

2016-11-09 23:39:37 1917 2

原创 位操作训练

1、题目:请编写一个c函数,该函数给出一个字节中被置为1的位的个数#include <stdio.h>int int2bin(int num){ int i; int count = 0; for( i = 0; i < 8; i++) { if( num & 1 ==1) { count++;

2016-11-08 23:12:41 500

原创 运算符

算术运算符:用于各类数值运算,包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(- -)关系运算符:用于比较运算,包括大于(>)、小于(=)、小于等于(逻辑运算符: 用于逻辑运算,包括与(&&)、或(||)、非(!)||和&&是我们经常用到的逻辑运算符,与按位运算符|和&是两码事。位操作运算符:参与运算的量,按二进制

2016-11-07 20:34:00 277

原创 原码、反码和补码

原码、反码和补码的记忆技巧原码: 如果机器字长为n,那么一个数的原码就是一个n位的二进制数有符号数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位为数值位,表示真值的绝对值。凡不足n-1位的,小数在最低位右边加零;整数则在最高位左边加零来补足n-1位。 例如:X = +101011,[X]原 = 0010 1011;X = -101011,[X]原 = 1010 1011。 注意:正数的原

2016-11-06 23:26:16 321

原创 GDB调试器中list的相关命令

在GDB调试器中进行调试时,我们也可以用list命令进行查看源码。其相关命令如下:list 显示程序第linenum行的周围的源程序。list 显示函数名为function的函数的源程序。list 显示当前行后面的源程序。list - 显示当前行前面的源程序。一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一

2016-11-05 21:44:03 444

原创 linux中根目录下各个目录的作用

b/bin 二进制可执行命令。该目录下存放着普通用户的命令/dev 系统的设备文件,即设备的驱动程序/home 用户主目录的基点/lost-found 这个目录平时是空的,当系统非正常关机而留下的“无家可归”的文件便会储存在这里/misc 储存着一些特殊的字符的定义/net 存放着和网络相关的一些文件/proc 存放着用户与内核的交互信息/sbin 系统的管理命令,这里存放的是系统管理

2016-11-04 18:48:05 7645

原创 gcc三级优化的作用

老师让我们自己查查gcc的三级优化分别做了哪些事,于是我便查了一些资料。以下内容摘自网络:GNU编译器提供-O选项供程序优化使用: -O 提供基础级别的优化 -O2 提供更加高级的代码优化,会占用更长的编译时间 -O3 提供最高级的代码优化 -O4 不优化,这是默认值 不同的优化级别使用的优化技术也可以单独的应用于代码。 可以使用-f命令行选项引用每个 单独的优化技术。 1, 编译器优

2016-11-03 21:26:00 1437

原创 面向过程与面向对象

什么是面向过程?什么是面向对象?我们很多人都知道, C语言是面向过程的; c++语言和Java语言是面向对象的。面向过程就是面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。在此引入我从网上看到的一个例子: 例

2016-11-02 21:37:02 446

原创 何为高质量的代码

身为一名程序员,会写代码是最基本的生存能力。而能写出高质量的代码,是每个优秀的程序员具备的基本素质。 那么什么是高质量的代码?怎样去评价一个代码的质量呢?老师告诉我们,判断一个代码的优秀与否,一般从以下四个方面:代码具有好的复用性代码具有好的可扩展性代码具有好的维护性代码具有良好的可读性可是这些问题我以前从来都没有想过,在写程序的时候也从来没有考虑过这些。直到今天,我在看《c和指针》时,

2016-11-01 22:51:29 521

原创 嵌入式开发为什么选择C语言?

众所周知,C语言在嵌入式开发中占有十分重要的地位,它们的关系非比寻常。那么为什么嵌入式开发会选择C语言,而不是其他语言呢?嵌入式开发是在操作系统内部做开发的,操作系统所有的内核几乎都是C语言编写,如果我们也使用C语言做开发,必定会具备一定的优势。再者,C语言相较其他的高级编程语言,其所有的特点对于嵌入式开发软件是再合适不过的了。C语言的特点如下:C语言具有出色的可移植性,能在多种不同体系结构的软/

2016-10-31 22:10:48 3863

原创 嵌入式Linux开发工具之调试器gdb

调试器gdb的简介gdb是GNU发布的一款功能很强大的程序调试工具,它只能在Linux平台下使用。gdb主要完成下面三个方面的功能:启动被调试程序。让被调试的程序在指定的位置停住。当程序被停住时,可以检查程序状态-变量值。调试器gdb的使用下面就以test.c 为例,介绍调试器gdb的一些简单用法:#include <stdio.h>int func2(int b){ int re

2016-10-30 22:39:16 623

原创 嵌入式Linux开发工具之gcc编译器

gcc的简介编译器gcc所具备的优点1、GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、和Ada等多种语言,而且gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译.2、那

2016-10-29 22:56:01 1375

原创 C语言学习笔记之指针

指针是C语言的重点与难点,利用指针可以实现存储空间的动态分配,减少空间上的浪费。 指针变量是一种特殊类型的变量,它里面存储的就是内存的地址。 1、指针的定义格式:类型标识符 *标识符 eg:float *pointer_1; ps1:一个指针变量只能指向同一类型的变量。 2、指针变量的初始化 一般形式:[存储类型] 数据类型 *指针名=初始地址值 eg:int *p1=&a; 3、指

2016-10-28 22:37:12 389

空空如也

空空如也

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

TA关注的人

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