分享 推荐大家一个靠谱的论文检测平台。重复的部分有详细出处以及具体修改意见,能直接在文章上做修改,全部改完一键下载就搞定了。怕麻烦的话,还能用它自带的降重功能。哦对了,他们现在正在做毕业季活动, 赠送很多免费字数,可以说是十分划算了!地址是:http://www.paperpass.com/...
错误:expected ‘)’ before ‘*’ token 今天在写代码时,又遇到 错误:expected ‘)’ before ‘*’ token说实话,这个错误不是什么大错误,一般都是什么手贱之类的多写了或少写了啥,但是我又找半天。我原先以为自己是中英符号切换错误、或是多写了空格之类的。于是,我把这一段删了又写,重复了好几遍,发现都是不是!终于想到了头文件上面,,,,我定义了一个Message的结构体,是以头文件的形式放在文件夹
进程间的信号通信 1.信号通信:信号(signal)机制是Unix系统中最为古老的进程间通信机制,很多条件可以产生一个信号:(1)当用户按某些按键时,产生信号。 (2)硬件异常产生信号:除数为0,无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号。 (3)进程用kill函数将信
信号量 1.信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源。进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步。信号量是用来解决进程之间的同步与互斥问题的一种进程之间通信机制,包括一个称为信号量的变量和在该信号量下等待资源的进程等待队列,以及对信号量进行的两个原子操作(PV操作)。其中信号量对应于某一种资源,取一个非负的整型值。信号
进程间的信号通信 1.信号通信:信号(signal)机制是Unix系统中最为古老的进程间通信机制,很多条件可以产生一个信号:(1)当用户按某些按键时,产生信号。 (2)硬件异常产生信号:除数为0,无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号。 (3)进程用kill函数将信
共享内存 1.共享内存是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻2.看到其中的内容。共享内存实现分为两个步骤:(1)创建共享、打开共享内存,使用shmget函数。(2)映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。 (3)分离共享内存。 (4)控
Linux文件编程 1.系统调用:所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务。为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用
Linux的文件函数 1.creat: (1)函数的作用:建立,创建新文件。 (2)函数的原型:int creat (const char * pathname,mode_t mode) (3)函数的参数:pathname:要建立的文件路径字符串。如:“/home/hello.c”。 mode:建立文件的权限。 (4)函数的返回值:成功返回文
简单的通讯录(有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
笔试题解析2 1、下面哪种C/C++分配内存的方法会将分配的空间初始化为0?A malloc()B calloc()C realloc()D new()(1)malloc 函数: void *malloc(unsigned int size) 在内存的动态分配区域中分配一个长度为size的连续空间,如果分配成功,则返回所分配内存空间的首地址,否则返回NULL,申请的内存不会进行
volatile关键字的作用 举例说明: volatile int i=10; int j = i; … int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。 volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化
顺序表与单链表 1.数据元素之间不是独立的,存在特定的关系,这些关系即结构。所以数据结构是指数据对象中数据元素之间的关系。数据结构分为逻辑结构和物理结构。逻辑结构分为:集合结构:数据元素之间没有特别的关系,仅同属相同集合。线性结构:数据元素之间是一对一的关系。树形结构:数据元素之间存在一对多的层次关系。图形结构:数据元素之间是多对多的关系。物理结构分为:顺序存储结构:将数据存储在地
宏定义与条件编译 宏定义:宏定义了一个代表特定内容的标识符。预处理过程会把源代码中出现的宏标识符替换成宏定义时的值。宏最常见的用法是定义代表某个值的全局符号。宏的第二种用 法是定义带参数的宏(宏函数),这样的宏可以象函数一样被调用,但它是在调用语句处展开宏,并用调用时的实际参数来代替定义中的形式参数。像这样#define MAX(a,b) a> b?a:b 就是定义了一个宏函数。宏函数与自
大端小端 小端CPU:高字节保存在高地址,低字节保存在低地址。int num = 0x12345678(12是高字节,78是低字节)大端CPU:低字节保存在高地址,高字节保存在低地址。int num = 0x12345678英特尔、arm都是小端。如何判断机器的大小端?#include <stdio.h>union node{ int num; char ch;};void big_sma
结构体与共用体 结构体的作用: 在网络协议、通信控制、嵌入式系统的c/c++编程中,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合在一起的一个整体。其表现形式是一个结构体。简单来说,结构体就是用来封装数据的。 结构体的定义:struct student{ int num; char name[20]; char sex; int age; floa
函数指针与函数指针数组 函数指针与函数指针数组有什么区别呢?让我们从下面的两个例子中看看其二者之间的区别吧 eg1:#include <stdio.h>int func(int num){ printf("num = %d ", num);}int func2(int *(p_func)(int)){ p_func(5);}int main(){ int (*p_func)(in
ralloc、malloc使用时的注意事项 malloc不能初始化所分配的内存空间,而函数calloc能。如果malloc函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之,如果这部分内存曾经被分配过,则其中可能遗留各种各样的数据,也就是说,使用malloc函数的程序开始时(内存还没有被重新分配)能正常进行,但经过一段时间(内存已经被重新分配,可能会出现一些问题)。calloc会将所分配的空间中的每一位都初始化为零,也就是说如
函数调用 函数调用的步骤:1、通过函数名找到函数入口地址。函数名是一个指针常量,保存的是函数的地址。 2、给形参分配空间。 3、传值:把实参变量对应的内存空间的值传递给形参变量的对应空间。 4、执行函数体语句。 5、函数返回并释放内存空间。什么时候传值,什么时候传址?当只读(只使用不修改)实参变量对应内存空间的值时,传实参变量名; 当写(即使用也修改)实参变量对应内存空间的值时,传实参变量对应空间的
数组指针与指针数组的区别 数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数
趣味题(求车速) 问题:一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859.两个小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?问题分析与算法设计: 根据题意,设所求对称数为i,其初值为95859,对其依次递增取值,将值得每一份分解后与其对称位置上的数进行比较,若每一个对称位置上的数皆相等,则可判断i即为所求