c/c++
文章平均质量分 71
xinianbuxiu
这个作者很懒,什么都没留下…
展开
-
(面试)C语言中关键字的总结
C语言中有很多的关键字,有register,static,const,extern,typedef,很多人可能只知道其表面含义,对其中的用法理解还不到位,希望这篇文章能帮助你: 1.register关键字Register关键字的作用:register为寄存器变量,简单来说,计算机一般是由CPU,内存,和硬盘组成的,而cpu是由运算器,控制器,存储器组成的,而register关键字的作原创 2016-07-25 10:19:45 · 1059 阅读 · 0 评论 -
守护进程
判断一个进程是否活着,我们主要是通过kill这一系统调用来完成:基本逻辑如下:if(kill(pid,0) != 0) it’s deadelse it’s alive 守护进程的最大特点就是脱离了中断,Linux提供了一个系统调用daemon(),要想自定义实现的话,主要包括以下六个步骤:1.第一步是使用umask函数,把所有的文件屏蔽字置0。文件屏蔽字原创 2016-10-23 21:57:21 · 297 阅读 · 0 评论 -
C++中struct与Class的区别
1、关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化如果没有定义构造函数,struct可以用大括号初始化。如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。关于默认访问权限class中默认的成员访问权限是private的,而struct中则是public的。 2、关于继承方式class继承默认是原创 2016-11-04 17:09:11 · 312 阅读 · 0 评论 -
文件锁
在Linux中,实现文件上锁的函数有lockf() 和fcntl() ,其中lockf()用于对文件施加建议性锁,而fcntl() 不仅可以施加建议性锁,而且可以施加强制性锁。fcntl()还能对文件的某一记录上锁,也就是记录锁。记录锁又可分读取锁(共享锁)和写入锁(排斥锁),文件的同一部分不能同时建立读取锁和写入锁。#include #include #include #原创 2016-10-24 23:47:11 · 421 阅读 · 0 评论 -
字节对齐
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同.一些平台对某些特定类转载 2016-10-14 23:54:04 · 202 阅读 · 0 评论 -
C++const总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对大家有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码转载 2016-11-05 23:50:00 · 245 阅读 · 0 评论 -
sleep函数
函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 在VC中使用带上头文件 #include 在gcc编译器中,使用的头文件因gcc版本的不同而不同 #include 注意 在VC中Sleep中的第一个英文字符为大写的"S"转载 2016-10-15 23:52:58 · 359 阅读 · 0 评论 -
char src[]与char *src的区别
char*src = "hello" 中的a是指向第一个字符‘a'的一个指针charsrc[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针但二者并不相同:看实例:把两个字符串相加:运行结果为:把字符串加到指针所指的字串上去,出现段错误,本质原因:*d存放在常量区,是无法修的。而数组是存放在栈中,是可以修改的。两者区别如下:一.原创 2016-07-21 16:16:18 · 2121 阅读 · 0 评论 -
C++基本概念
1.常对象:常对象中数据成员为常变量且必须要有初值 常对象数据成员的值不能被修改 不能调用该类非const成员函数 声明常成员函数可以访问数据成员, 但是仍不可以改变数据成员值常对象成员函数未加const,编译系统把它当做非const处理2.常数据成员:常数据成员值不能改变,只能通过参数初始化表对常数据成员进行初始化。不能再构造函数中赋值。3.常成员函原创 2016-09-30 01:23:46 · 443 阅读 · 0 评论 -
数据结构基本定义
一、何为数据结构:数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。基本概念与术语:数据何为数据:它是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。这里的数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。数据元素何为数据元素:是组成数据的、有一定意义的原创 2016-11-14 23:47:25 · 3337 阅读 · 0 评论 -
进程间通信方式有哪些?各自有哪些优缺点?
1)管道管道分为有名管道和无名管道无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系一般指的是父子关系。无明管道一般用于两个不同进程之间的通信。当一个进程创建了一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,这样提供了两个进程之间数据流动的一种方式。有名管道也是一种半双工的通信方式,但是它允许无亲原创 2017-01-15 16:18:23 · 10911 阅读 · 0 评论 -
嵌入式C++实战开发详解(一)
一、面向过程编程 VS面向对象编程1、面向过程的特点:a、c语言特点:(1)c语言是在实践的过程中逐步完善起来的 没有深思熟虑的设计过程,使用时存在很多“灰色地带”(2)残留量很多低级语言的特征 直接利用指针进行内存操作c语言的目标是高效b、面向过程程序设计:数据结构+算法 问题:软件可重用性差; 软件可维护性差; 构建原创 2017-02-07 11:52:17 · 6845 阅读 · 0 评论 -
c++实战开发详解(二)类与对象
一、面向对象编程介绍(一)什么是面向对象? 面向将系统看成通过交互作用来完成特定功能的对象的集合。每个对象用自己的方法来管理数据。也就是说只有对象内部的代码能够操作对象内部的数据。(二)面向对象的优点 ·面向过程的缺点不容易维护,灵活性差,不容易扩展,更谈不上复用,由于客户的需求多变,导致程序员加班加点,甚至整个项目经常返工。·面向对象的优点通过继承、封装、多态原创 2017-02-09 09:50:20 · 788 阅读 · 0 评论 -
C语言面试题
编写一个程序,实现输出链表中倒数第K个结点ListNode * FindKthToTail(LisNode *head,unsigned int k){if(head == NULL|| K == 0) //入口参数检查!!!{return NULL;}int i;ListNode *pAhead= head;ListN原创 2017-02-10 19:17:40 · 591 阅读 · 0 评论 -
系统调用与库函数的区别
(1)库函数是语言或应用程序的一部分,而系统调用是内核提供给应用程序的接口,属于系统的一部分(2)库函数在用户地址空间执行,系统调用是在内核地址空间执行,库函数运行时间属于用户时间,系统调用属于系统时间,库函数开销较小,系统调用开销较大(3)库函数是有缓冲的,系统调用是无缓冲的(4)系统调用依赖于平台,库函数并不依赖原创 2017-02-12 16:31:01 · 750 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)--- 由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2、堆区(heap)--- 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于转载 2016-10-12 21:42:07 · 220 阅读 · 0 评论 -
C++中new,delete详解及其与malloc,free的区别
对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。对于不能确定需要占用多少内存的情况,动态内存分配解决了这个问题。 new和delete运算符是用于动态分配和撤销内存的运算符。一、new用法1.开辟单变量地址空间 使用new运算符时必须已知数据类型,原创 2016-11-03 14:52:44 · 429 阅读 · 0 评论 -
C语言学习之指针变量
一、首先,指针是一个变量,,系统固定为指针分配内存空间,而且指针有自己的地址,指针能够存值,但这个值比较特殊---——地址;1、指针的类型(1) int *ptr;//指针类型是int *(2) char *ptr;//指针类型是char *(3) int **ptr;//指针类型是int **(4) int (*ptr)[3];//指针类型是int (*)[3](原创 2016-07-16 17:23:40 · 527 阅读 · 0 评论 -
C语言学习之位操作符的使用
一、常用的位运算符有:&,|,~,>,^位运算一般可用来解决以下问题:1、&运算(1)、清0特定位:(mask中特定位置0,其他位为1,s=s&mask) (2)、取某数中指定位:(mask中特定位置1,其他位为0.s = s&mask)举个例子:请编写一个c程序,输入十进制整数,顺序输出32位二进制数方法二:要获取一个数的m到n位,原创 2016-07-16 15:01:12 · 400 阅读 · 0 评论 -
宏函数与自定义函数的区别(面试总结)
在c语言中,函数式宏定义和自定义函数的区别是什么?自定义函数:宏函数(1)函数式宏定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以危险性高;但因为省去了函数的调用,返回,释放,所以效率比自定义函数高;(2)调用真正函数的代码和调用函数式宏定义的代码编译生成的指令不同。如果MAX是个普通函数,那么它的函数体return a > b ? a原创 2016-07-29 15:39:34 · 7910 阅读 · 1 评论 -
malloc,realloc,calloc的用法及区别
首先,在gcc编译器下,我们先观察一下这几个函数的功能:由此可以看出:函数malloc()在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址;函数calloc()参数size为申请地址的单元元素长度,nmemb为元素个数,即在内存中申请nmemb *size字节大小的连续地址空间;函数realloc原创 2016-07-19 16:22:47 · 6601 阅读 · 0 评论 -
遍历整型数组的三种方式
原创 2016-07-14 18:59:44 · 1422 阅读 · 0 评论 -
5招教你避免野指针
5招教你避免野指针招式一:在定义一个指针时,若指针无指向,设置为NULL举例如下图所示:输出效果为:那么什么叫作空指针呢?在c语言中,是这么定义的,#define NULL (void *)0该0地址是不允许操作,也不允许访问的;所以指针指向空时,既不允许访问,也不允许修改;而且在代码有错时,可以很方便的调试出来;招式二:当要往指原创 2016-07-19 20:32:56 · 903 阅读 · 0 评论 -
(面试)指针与数组的区别
1、从空间分配上来看,数组是静态分配,指针是动态分配内存;2、从访问效率上来看,数组是直接访问的,指针是间接访问;3、从安全性方面来看,数组易造成越界,指针易造成内存泄漏;4、从函数形参来看,传的数组名可以转化为指针;5、指针更偏向于地址的处理,数组偏向于值的处理;6、数组分配的空间是连续的; 指针分配的空间未必是连续的;原创 2016-07-20 19:46:30 · 567 阅读 · 0 评论 -
字符串函数的使用
1.strcat函数其一般形式为Strcat(字符数组1,字符数组2)其作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值---字符数组一的地址。例如:输出为:I LOVE CHINA I FEEL HAPPY注意:字符数组1 必须足够大,以便容纳连接后的新的字符串。 2.strcpy与strncpy函数原创 2016-07-21 10:47:21 · 855 阅读 · 0 评论 -
企业级函数的编写:
如何写一个合格的函数呢?1、对所调用函数的错误返回码要仔细、全面地处理。即调用函数后,验证其返回值是否成功;2、防止将函数的参数作为工作变量。说明:将函数的参数作为工作变量,有可能错误地改变参数内容,所以很危险。对必须改变的参数,最好先用局部变量代之,最后再将该局部变量的内容赋给该参数。3、函数的规模尽量限制在200行以内。4、一个函数仅完成一件功能。5、为简单功能编写原创 2016-07-21 17:13:26 · 586 阅读 · 0 评论 -
C语言小知识
今天意外学到了一些C语言小知识,跑过来和大家分享一下:1.众所周知,C语言中实现1到n个数相加有两种方式,一是用for循环,还有一种方式是递归,那这两种方式的区别是什么呢?(1)递归容易理解,因为f(n)=f(n-1)+n;可以一眼看出前后的关系;(2)递归比循环实现较容易;(3)递归比C语言实现速度慢;(4)递归容易出现峰值内存,因为有压栈处理;2.#ifndef...原创 2016-09-13 23:12:28 · 216 阅读 · 0 评论 -
break,continue,exit(0)的区别
#include void main(){ int i; int n; for(i = 0;i < 8;i++) { n = rand()%5; switch(n) { case 1: case 3: printf("%d原创 2016-09-18 20:56:13 · 3723 阅读 · 1 评论 -
static,auto,register,extern的区别;
#include fun(int x,int y){ static int m = 0; static int i = 2; i += m + 1; m = i + x + y; return m;}void main(){ int j = 1; int m = 1; int k; k = fun(j,m); printf("%d,",k); k =原创 2016-09-20 20:42:40 · 1508 阅读 · 0 评论 -
文件读写
文件读写有三种方法: (1)块读写: 用fread , fwrite。 (2)字符读写(一个一个读写): 用fgetc,fputc; (3)字符串读写(一行一行读写): 用fgets,fputs; 注意点:1.当对文件的读(写)操作完原创 2016-09-21 23:49:21 · 406 阅读 · 0 评论 -
查看变量地址
在Linux中写一个程序,里面全局变量,局部变量,static,const,常数,数组,输出这些变量的地址(包括赋值的和没有赋值的,各类数据类型);代码如下:#include int a;int b = 1;int const c = 1;int const x;static int d;static int e = 1;char str[3];char str1[]原创 2016-10-21 20:55:34 · 2289 阅读 · 0 评论 -
构造函数与析构函数
构造函数 先看看构造函数的调用顺序规则,只要我们在平时编程的时候遵守这种约定,任何关于构造函数的调用问题都能解决;构造函数的调用顺序总是如下:1.基类构造函数。如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序,而不是它们在成员初始化表中的顺序。2.成员类对象构造函数。如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始原创 2017-02-03 17:01:45 · 439 阅读 · 0 评论