- 博客(121)
- 收藏
- 关注
原创 自己实现strstr函数与strchr函数
const char *my_strstr(const char *str, const char *sub_str) { for(int i = 0; str[i] != '\0'; i++) { int tem = i; //tem保留主串中的起始判断下标位置 int j = 0; while
2017-07-06 15:10:04
629
原创 快速弄懂内存字节对齐
字节对齐有三原则:1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。 2:结构体作为成员:如果一个结构里有某些结构体成员,
2017-07-06 10:59:44
1250
转载 STL6大标准库的关系和作用
STL六大组件简介1、容器(Containers):各种数据结构,如Vector,List,Deque,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部分很像冰山载海面的比率。2、算法(Algorithms):各种常用算法如Sort,Search,Copy,Erase,从实现的角度来看,STL算法是一种Function Temp
2017-02-13 20:27:10
2040
转载 int *ptr=(int *)(&a+1)
int *ptr=(int *)(&a+1)(面试题),有需要的朋友可以参考下。【问题】:请写出以下程序的输出结果。int main(){ int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d\n",*(a+1),*(ptr-1));}【分析】:此题需要理解指针和数组的内在含义。
2016-12-24 22:14:44
961
转载 linux套接字
一、什么是socket socket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行。也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信。也因为这样,套接字明确地将客户端和服务器区分开来。二、套接字的属性套接字的特性由3个属性确定,它们分别是:域、类型和协议。1、套接字的域
2016-12-23 23:42:42
974
转载 自己实现strcpy
一个标准的strcpy函数:原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了。下面给出网上strcpy的得分版本:2分void strcpy( char *strDest, char *strSrc ){ while( (*strDest++ = * strSrc++) != '\0’ );}
2016-12-22 22:24:02
2321
转载 B/S和C/S的区别
一、什么是CS和BS结构? 1.C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQLServer。客户端需要安装专用的客户端软件。 2.B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或In
2016-12-21 23:23:07
369
转载 带缓冲的I/O操作和不带缓冲的I/O操作
首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能(但内核还是提供缓冲的)。每调用一次write或re
2016-12-20 23:12:35
856
原创 const char *p,char const *p, char * const p之间的区别
const char * p 和 char const * p 是一个意思,都是p所指向的变量的值不能改变,例如:const char ch = 'a';const char* p = &ch;*p = 'b'; //这样是错的char* const p,意思是p所指向的地址是不能改变的,例如:char* const p = &ch1;p = &ch2; //这样是错的
2016-12-19 23:07:39
646
原创 什么是子网掩码
子网掩码(subnet mask)是每个使用互联网的人必须要掌握的基础知识,只有掌握它,才能够真正理解TCP/IP协议的设置。子网掩码——屏蔽一个IP地址的网络部分的“全1”比特模式。对于A类地址来说,默认的子网掩码是255.0.0.0;对于B类地址来说默认的子网掩码是255.255.0.0;对于C类地址来说默认的子网掩码是255.255.255.0。利用子网掩码可以把大的网络划分
2016-12-18 23:05:52
4654
转载 typedef 函数指针的用法
进入正文: 代码简化, 促进跨平台开发的目的. typedef 行为有点像 #define 宏,用其实际类型替代同义字。 不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。用法一:typedef int (*MYFUN)(int, int); 这种用法一般用在给函数定义别名的时候上面的例
2016-12-17 23:59:10
452
转载 什么是枚举
枚举类型在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不
2016-12-15 22:20:52
1344
原创 http协议
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。
2016-12-14 23:08:25
259
原创 C语言练习题1
char *getmemory(void){char p[] = “hello world”;return p;}void test(void){char *str = NULL;str = getmemory();printf(“%s\n”,str); }请问运行Test会有什么样的结果?A. 出
2016-12-13 22:25:09
340
转载 网关
网关 网关工作原理图概述网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打
2016-12-11 22:39:36
1574
转载 什么是堆,栈,内存泄漏和内存溢出?
heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(h
2016-12-10 23:36:56
6016
3
原创 TCP与UDP的区别
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。UDP(User Datagram Protocol)UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。 即使是出现网络拥堵的情况下,UDP也无法进行流
2016-12-09 23:15:07
354
转载 什么是TCP三次握手?
TCP三次握手所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明
2016-12-08 22:23:24
1325
转载 五类IP地址
P地址分为A,B,C,D,E五类。网络号:用于识别主机所在的网络; 主机号:用于识别该网络中的主机。其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用。这三种是主要的。IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。其中A类、B类、和C类这三类地址
2016-12-07 22:45:33
410
原创 函数如何实现“多个返回值”?
方法1:利用全局变量 分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。下
2016-12-06 22:44:15
7663
转载 字符串逆序的几种方法
普通逆序char* Reverse(char* s){ //将q指向字符串最后一个字符 char* q = s ; while( *q++ ) ; q -= 2 ; //分配空间,存储逆序后的字符串。 char* p = newchar[sizeof(char) * (q - s + 2)] ; char* r = p ;
2016-12-05 23:20:09
2980
原创 为什么8位有符号数的取值范围是-128~+127
首先我们知道,计算机以补码的形式存储的,正数的补码是原码不变,负数的补码是原码的取反加1。我们先来看+127,原码0111 1111对吧,若+128是多少呢,0111 1111 + 1 = 1000 0000 (原码),然后存储时,计算机一看是最高位为1,就保持符号位不变,后面7位取反加1,然后呢,进位舍弃,还是1000 0000(-128)。所以对于8位数据来说,+128 实际上变成 -
2016-12-04 22:57:34
4854
原创 进程与线程的区别
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源(4)系统开销:由于在创建或撤销进程时,操作系统为此所付出的开销将显著地大于在创建或撤消线程时的开销。类似的。进程切换的开销也远大于线程切换的开销。
2016-12-03 23:04:39
235
转载 字符串数组 和 字符串指针 的区别
在C语言中,对字符串的操作主要有两种方式,一是使用字符数组,char str[];二是使用字符指针。那么二者有什么区别呢?下面将分述二者的使用,最后进行比较。一、字符数组 使用char str[]定义一个字符数组str,中括号内可以写上数字表示数组大小,也可以不写。如果不写数字,则必须为字符数组提供初始值,以便编译器进行内存分配。可以使用字符串字面
2016-12-02 23:29:36
2477
原创 位运算求平均数
对于位运算求两个数的平均值问题,(整形数据)int average(int x,int y){return ( (x&y) + ( (x^y)>>1 ) );}12341234给出两个整数,求出结果。 刚开始看到这道题的做法就是x和y转换为二进制,然后计算出结果。在没有办法的情况下这样做也可以得出结果。跟你想象的一点不差,这里确实有捷径。题目中的&和^都是位
2016-12-01 21:16:02
1956
原创 程序运行的时间的估算
1 大部分程序的大部分指令之执行一次,或者最多几次。如果一个程序的所有指令都具有这样的性质,我们说这个程序的执行时间是常数。 logN 如果一个程序的运行时间是对数级的,则随着N的增大程序会渐渐慢下来,如果一个程序将一个大的问题分解成一系列更小的问题,每一步都将问题的规 模缩减成几分之一 ,一般就会出现这样的运行时间函数。在我们所关心的范围内,可以认为运行时间小于一个大的常数
2016-11-30 22:23:04
2891
转载 如何确定CPU是大端字节序还是小端字节序?
大端字节序:高字节存放在低地址,低字节存放在高低址小端字节序:低字节存放在高低址,高字节存放在低地址大小端字节顺序它是CPU的属性,所哟不同的CPU的大小端字节顺序也不同,移植的时候需要先判断当前的CPU是大端还是小端字节序,如果不同则移植需要转移字节序int num = 0x12345678 大端
2016-11-29 22:45:45
2723
原创 fprintf与fwrite的区别
C语言把文件看作一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCII文件和二进制文件。ASCII文件又称为文本(text)文件,它的每个字节放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内在中的存储形式原样输出到磁盘上存放。fprintf(fp, "%d", buffer); 是将格式化的数据写入文件fprintf(
2016-11-28 22:56:46
693
转载 malloc和free的深层次分析
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以 写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助
2016-11-27 22:23:37
236
原创 Linux下对文件操作时出现乱码怎么办?
Linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助。如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。查看文件编码 在Linux中查看文
2016-11-26 23:38:07
859
转载 C语言编译过程
hello.c源代码如下:?[Copy to clipboard]View Code C123456[c] view plaincopy"color:#339933">#include "color:#993333">int main"color:#009900"
2016-11-25 23:24:16
261
原创 linux下的几种进程间通信方式的特点
linux上面的IPC大多都是从UNIX上面继承而来。 最初Unix IPC包括:管道、FIFO、信号。System V IPC包括:System V消息队列、System V信号灯、System V共享内存区。由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(PSOIX)
2016-11-24 22:16:16
3455
转载 C语言位运算
位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或移位运算要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。 2 " 3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。 4 ">>>"运算符
2016-11-23 22:04:44
290
转载 C和C++中struct和typedef struct的异同
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是
2016-11-22 22:22:44
202
原创 函数的可重入性
1.什么是可重入性重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。可重入的函数必须满足以下三个条件:(1)可以在执行的过程中可以被打断;(2)被打断之后,在该函数一次调用执行完之前,可以再次被调用(或进入,reentered)。(3)再次调用执行完之后,被打断的上次调用可以
2016-11-21 22:42:22
377
1
转载 C语言清空缓冲区
看下面一个例子:[cpp] view plain copy #include int main() { int num; char ch ; scanf("%d", &num); scanf("%c", &ch); printf("hello world\n"
2016-11-20 22:22:03
12679
5
转载 什么是C语言中的条件编译?
这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else
2016-11-19 23:20:28
587
原创 C语言中返回错误信息的函数总结
C语言strerror()函数:返回错误原因的描述字符串头文件:#include 定义函数:char * strerror(int errnum);函数说明:strerror()用来依参数errnum 的错误代码来查询其错误原因的描述字符串, 然后将该字符串指针返回.返回值:返回描述错误原因的字符串指针.范例:[c
2016-11-18 23:33:13
9205
转载 联合体的用法与特点
1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配
2016-11-17 22:47:53
750
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人