![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
zxnsirius
走上坡路!
展开
-
select-IO多路复用
1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。如果一个服务器即要处理TCP,又要处理UD原创 2016-10-29 14:59:45 · 851 阅读 · 0 评论 -
[C/C++笔面试]自己实现memcpy,小结strcpy与memcpy区别
C/C++笔试面试题自己实现memcpy小结strcpy与memcpy的区别原创 2016-08-27 13:58:47 · 1135 阅读 · 0 评论 -
[C/C++笔面试]不用库函数自己实现strcpy和strncpy
C/C++笔试面试题自己实现strcpy和strncpy原创 2016-08-27 13:43:10 · 3092 阅读 · 0 评论 -
[C/C++笔面试]不使用库函数将字符串转换为整数
与数字转换为字符串类似,C/C++提供了几个标准的库函数,可以将字符串转换为任意类型(整型,长整型,浮点型)的数字。下面列举其函数 atof();将字符串转换为双精度浮点型值 atoi();将字符串转换为整型值 atol();将字符串转换为长整型 strtod();将字符串转换为双精度浮点型值,并报告不能被转换的所有剩下数字 strtol();将字符串转换为长整型值,并报原创 2016-08-27 12:59:47 · 2849 阅读 · 0 评论 -
[C/C++笔面试]不使用库函数将整数转换为字符串
C/C++笔试题面试题不适用库函数将整数转换为字符串原创 2016-08-27 12:20:30 · 2469 阅读 · 1 评论 -
编译系统(预处理、编译、汇编、链接)-详解
让我们来用最简单的程序理解一下我们的编译系统#include <hello.c>int main(){ printf("hello world\n"); return 0;}hello程序的生命周期是从一个高级语言C语言程序开始,因为这种形式能够人读懂。然而,为了在系统上运行hello.c程序,每条C语句都必须被其他程序转化为一系列的低级机器语言指令。然后这些指令按照一种称为可执原创 2016-04-17 22:43:15 · 1361 阅读 · 0 评论 -
malloc、ralloc、calloc的用法,作用,区别,及实现原理
先来看一下三个函数的声明:void * malloc(usigned size);void * realloc(void *ptr, unsigned newsize);void * calloc(size_t numElements, size_t sizeofElement);它们都包含在#include <stdlib.h>头文件中,他们的返回值都是请求分配的地址,如果请求失败就返回NUL原创 2016-04-15 11:43:02 · 4524 阅读 · 0 评论 -
sizeof与strlen的区别:面试回答
示例:char *ptr = "hello world";char str[100] = "hello world";sizeof(ptr) = 4Bsizeof(str) = 100Bstrlen(ptr) = 11Bstrlen(ptr) = 11B面试回答总结:我认为sizeof()与strlen()有以下几个区别。strlen是一个函数,它测量的是字符串中除去’\0’以外的字符数;而原创 2016-04-15 09:56:09 · 455 阅读 · 0 评论 -
ANSIC标准定义的C语言预处理指令总结
另外ANSI标准C还定义了如下几个宏:__LINE__ 表示正在编译的文件的行号__FILE__ 表示正在编译的文件的名字__DATE__ 表示编译时刻的日期字符串 如:“23 dec 2015”__TIME__ 表示编译时刻的时间字符串 如: ”12:30:45“__STDC__ 判断该文件是不是宏定义成标准C程序如果编译器不是标准的,则可能不支持以上宏部分,或者根本原创 2016-04-15 09:27:49 · 1111 阅读 · 0 评论 -
C/C++什么是页抖动?
有些操作系统(如UNIX和增强模式下的Windows)使用虚拟内存,这是一种使机器的作业地址空间大于实际内存的技术,它是通过用磁盘空间模拟RAM(random—access memory)来实现的。在80386和更高级的Intel CPU芯片中,在现有的大多数其它微处理器(如Motorola 68030,sparc和Power PC)中,都有一个被称为内存管理单元(Memory Management原创 2016-04-15 01:06:33 · 581 阅读 · 0 评论 -
C/C++左值&右值
什么是左值(lvaule)?左值是指可以被赋值的表达式。左值位于赋值语句的左侧,与其相对的右值(rvaule,见 1.11)则位于赋值语句的右侧。每条赋值语句都必须有一个左值和一个右值。左值必须是内存中一个可存储的变量,而不能是一个常量。下面给出了一些左值的例子:int x;int *p_int;x=1;*p_int=5;变量x是一个整数,它对应于内存中的一个可存储位置,因此,在语句“x=1”原创 2016-04-15 00:46:19 · 518 阅读 · 0 评论 -
extern关键字的作用
用一句很贴切的话来形容我们的extern关键字就是“外来的和尚会念经” extern 是指当前变量或函数不是本源文件内声明的,它是外部变量和外部函数,正所谓“外来的和尚会念经”,能够很好的体现extern的价值。当我们在本文件中试图引用一个外部声明的全局变量或者函数的时候,可以在其前面加上extern,表示它是外来的“和尚” extern 可以修饰变量和函数,表示该变量或函数在其他的地方原创 2016-03-31 19:49:48 · 3227 阅读 · 0 评论 -
#include<head.h>与#include“head.h”的区别
#include <head.h>/* 尖括号<>表明这个文件是一个工程或标准的头文件,在预处理查找过程中会首先检查系统预定义的目录,如果没有找到就报错 */#include "head.h"/* 双引号括起来的文件表明这是一个用户自定义的头文件,查找文件的时候会先在当前文件目录中查找,如果没有找到再去系统预定义的目录中查找,如果没有找到再报错 */原创 2016-08-26 19:06:54 · 1550 阅读 · 0 评论 -
[C/C++笔面试]自己实现Strlen,my_strlen最优解
C/C++笔试面试题strlen的实现两种方法原创 2016-08-27 15:25:54 · 977 阅读 · 0 评论 -
指针与引用的区别
区别如下:初始化要求不同:引用在创建的同时必须初始化,就是它必须引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值。可修改性不同:引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在任何时候都可以改变为指向另一个对象。给引用赋值并不是改变它和原始对象的绑定关系不存在NULL引用:引用不能使用指向空值的引用,它必须总是指向某个对象;而指针则原创 2016-08-26 21:39:42 · 757 阅读 · 0 评论 -
内联函数与宏的区别
内联函数在编译时期展开,而宏是在预处理时期展开在编译的时候,内联函数可以直接被镶嵌到目标代码中,而宏只是一个简单的文本替换内联函数可以完成诸如类型检测,语句是否正确等编译功能,而宏没有这样的功能。宏不是函数,而内联函数是函数宏在定义的时候要小心的处理宏参数,一般情况下要把参数用括号括起来,否则容易出现一些二义性,而内联函数定义不会出现二义性。原创 2016-08-26 21:24:38 · 674 阅读 · 0 评论 -
C++中static关键字的作用
在C语言中static的作用如下第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。 第三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量原创 2016-08-26 21:21:02 · 1452 阅读 · 0 评论 -
const与#define的特点与区别
const与#define的特点与区别 define 只能用来做文本替换,编译器会在预处理阶段完成所有的宏替换,然后进行编译,因此define的生命周期停止于编译期。它存在程序的代码段中,而实际程序中它只是一个常数,一个命令中的参数,并没有实际的存在。 而const常量存放在程序的数据段,并在堆栈上分配了空间,它在程序中确确实实的存在者并可以被调用传递,const常量有数据类型,而宏常量没原创 2016-08-26 19:11:58 · 528 阅读 · 0 评论 -
C与C++有什么区别?
C与C++的区别简答 C是一个结构化的语言,它是面向过程的。它的重点在于算法与数据结构,对于语言本身C是C++的一个子集,C程序的设计首要考虑的是如何通过一个过程对输入进行运算处理得到输出。而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够配合对应的问题,这样就可以通过获取对象的状态信息得到输出或实现过程控制。 所以C与C++的最大的区别在于他们用于解决问题的思想方法不一样原创 2016-08-26 19:02:31 · 840 阅读 · 0 评论 -
野指针与内存泄露
野指针的成因主要有两种(1)指针变量没有被初始化,任何指针变量刚被创建时不会自动生成NULL指针。它的默认值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存例如:char *p = NULL;char *str = (char *)malloc(sizeof(char)* 100); (2)指针p被free或者delete之后,没有原创 2016-03-31 20:04:54 · 615 阅读 · 0 评论 -
[C/C++笔面试]编程查找两个字符串中的最大公共子串
C/C++笔试面试题编程查找两个字符串中的最大的公共子串原创 2016-08-28 17:00:55 · 3941 阅读 · 0 评论 -
[C/C++笔面试]自己编程实现strcmp
原型:extern int strcmp(const char s1,const char s2);用法:#include < string.h >功能:比较字符串s1和s2。一般形式:strcmp(字符串1,字符串2)说明:当s1 < s2时,返回值<0当s1 = s2时,返回值=0当s1 > s2时,返回值>0/*********************************原创 2016-08-28 14:45:57 · 1156 阅读 · 0 评论 -
[C/C++笔面试]判断字符串是不是回文
C/C++笔面试判断字符串是不是回文原创 2016-08-28 11:30:01 · 1558 阅读 · 0 评论 -
[C/C++笔面试]编程实现字符串中各单词的翻转
C/C++笔面试编程实现字符串中各单词的翻转编写函数,将“I am from Shanghai”倒置为“Shanghai from am I”,即句子中的单词位置倒置,而不改变单词内部的结构原创 2016-08-28 11:06:56 · 1651 阅读 · 0 评论 -
[C/C++笔面试]自己实现strstr库函数
C/C++笔试面试题自己实现strstr库函数编程实现字符串中子串的查找原创 2016-08-28 10:22:56 · 984 阅读 · 0 评论 -
volatile关键字:专一王子
每个变量和其名字一样善变,有时候它善变是发自内心的,有时候是外部因素决定的,只有volatile变量才会表里如一,因此获得了专一王子的美誉。 volatile字面意思是易挥发、易变化的意思,它修饰的变量表示该变量的值很容易由于外部的因素而发生改变,强烈要求编译器要老老实实的在每次对变量进行访问时去内存里读取。举个生活中的栗子: 你明天 有一个朋友要过生日,今天把要送的礼物打包好了,一般情况下原创 2016-03-31 19:44:19 · 440 阅读 · 0 评论 -
register关键字的作用
我认为register关键字以下几个作用。 首先、使用register 关键字修饰的局部变量是一个寄存器变量,它请求编译器尽可能的将变量存在寄存器中,这样是的CPU省去了从内存中获取数据的时间,从而提高程序的运行效率。 一般我们会把经常使用或者频繁访问的局部变量用register修饰,这里需要注意的是register修饰的局部变量名。不可以对其取地址,比如registe原创 2016-03-31 19:39:40 · 1601 阅读 · 0 评论 -
C++学习之旅内联函数
C++内联函数 内联函数是C++为提高程序运行速度所做的一项改进,常规函数与内联函数之间的主要区别不在于编写方式,而在于C++编译器如何将它们组合到程序当中。要了解内联函数与常规函数之间的区别。必须深入到程序内部。 编译的最终产品是可执行程序----由一组机器语言指令组成。运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定过的内存地原创 2016-04-14 10:11:07 · 709 阅读 · 0 评论 -
C/C++条件操作符与错误防范
//开门见山if (num == 5){ ...}//如果手误写成了下面这样if (num = 5){ ...}许多的人可能都曾写出上面的这样代码。编译器看到这样的代码,只会将3赋给num。这时,你的if语句将永远成立,因为num = 5永远都是true。这是if语句中非常非常常见的、而又非常难以发现的错误。一般来说,编写让编译器能够发现错误的代码,比找出导致难以理解错原创 2016-04-12 21:45:59 · 412 阅读 · 0 评论 -
const关键字的作用
相传在C的世界里出现了一件极品装备(铁布衫)const、它的出现,让天下的所有刺客和黑客都闻风丧胆,在它的保护下,所有的变量都可以保存的完好无损 const是constant的缩写,表示海枯石烂、恒定不变、一旦相伴、永不变心。只要一个变量前面用const来修饰,就意味着该变量的数据可以被访问,不能被修改。其实我们还可以叫它readonly虽然理解起const来相对比较容易理解,但是const不仅原创 2016-03-31 19:47:19 · 1470 阅读 · 0 评论 -
面向对象PK面向过程
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2原创 2016-03-26 20:31:27 · 392 阅读 · 0 评论 -
exit和return的区别
exit()是一个函数 ,结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程,在父进程中wait系统调用将接受到此返回信息。return返回函数值,是关键字 在main函数中我们通常使用return (0);这样的方式返回一个值。 但这是限定在非void情况下的也就是void main()这样的形式。 exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束跳会操作系统。原创 2016-03-26 19:54:59 · 422 阅读 · 0 评论 -
scanf的返回值
scanf(”%d”, &num); //如果该例输入非法的字符串,则出错解决办法:通过研究scanf的返回值我们知道,scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF所以,我们可以这样写if (scanf(“%d”, &num)){ //成功}else{ //失败}解决原创 2016-03-26 19:53:14 · 495 阅读 · 0 评论 -
C语言产生随机数
先来一个例子: 备注:如果把第九行【srand((int)time(NULL))】注释掉,那么程序可以无错误的运行,但是每次出来的15个数都是和之前出来的15个数是一样的!所以必须把srand((int)time(NULL))加上!头文件: #include 定义函数 :int rand(void) 函数说明 : 因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期原创 2016-03-26 19:46:07 · 1003 阅读 · 0 评论 -
my_printf的实现小例子
my_printf的实现小例子原创 2016-03-31 20:08:26 · 505 阅读 · 0 评论 -
my_strncmp的写法
strncmp 函数的分析 1 函数原型 extern int strncmp(char *s1, char * s2, int n); 2 函数用法 #include <string.h>3 函数功能 比较字符串s1和s2的前n个字符。 4 函数说明: 当s1 当s1=s2时,返回值=0 当s1>s2时,返回值>05 函数源码int my原创 2016-03-31 20:02:09 · 1118 阅读 · 0 评论 -
如何简单的判断机器的大小端字节序
大端字节序:高字节存放在低地址,低字节存放在高低址小端字节序:低字节存放在高低址,高字节存放在低地址大小端字节顺序它是CPU的属性,所哟不同的CPU的大小端字节顺序也不同,移植的时候需要先判断当前的CPU是大端还是小端字节序,如果不同则移植需要转移字节序int num = 0x12345678 大端原创 2016-03-31 19:58:28 · 3264 阅读 · 0 评论 -
枚举和#define宏之间的区别
(1)从处理过程的角度看: #define宏是由编译预处理器在预编译处理时处理的,而且只做简单的字符串的替换。枚举常量则是在编译的时候确定其值的。(2)从调试的角度看: 通常情况下,在编译器里,可以调试枚举常量,而不能调试宏常量。(3)从数据的类型看: #define可以编译任意类型的常量,而枚举只能是定义整型常量。(4)从代码编写角度看: 枚举可以一次定义大量常量,而#de原创 2016-03-31 19:52:57 · 474 阅读 · 0 评论 -
声明与定义
什么是声明?什么是定义?它们有什么区别?定义: 什么是定义:所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上名字,这个名字就是我们经常所说的变量名或对象名。但是注意,这个名字一旦和这块内存匹配起来(可以想象是这个名字嫁给了这块空间),它们就同生共死、终身不离不弃,并且这块内存的位置也不能被改变。一个变量或对象 在一定的区域内(如函数、全局等)只能被定义一次,如果定原创 2016-03-31 19:45:26 · 526 阅读 · 0 评论 -
手把手教你写_“华为”_的标准注释与文档,以及代码规范
注释为什么要写注释呢?为什么要写文档呢? 也许有人会这样问。但是我只想说如果你还在这样问,那么你不仅不是一个优秀的程序员,应该说你是不是程序员都应该受到质疑。先说一下注释的重要性: 在公司的开发中,我们要明白程序不是写给自己看的,也不是所有的代码都是自己写的,我们不仅需要看别人的代码而且还要把自己的代码交给别人看,团队看。也许还会在你离职以后交给你的接班人看。而且,就算是你写的程序原创 2016-04-13 01:39:58 · 4799 阅读 · 0 评论