C/C++笔试
文章平均质量分 78
如小丧
这个作者很懒,什么都没留下…
展开
-
在switch-case中定义变量时当心被“穿越”
这篇文章的分类是C++,所以特此声明这里提到的规则只适用于C++。对于C语言,是有不同的一套规则的。先来看看下面这段代码,有问题吗?void RunStateMachine() { switch(m_status) { case TASK_START: int data = FormDataToSend();转载 2015-09-23 13:49:21 · 1080 阅读 · 0 评论 -
阿里笔试题
1、 堆和栈的区别?答:1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、栈是向下增长的,堆是向上增长的。(可以参考转载 2015-07-22 20:29:16 · 589 阅读 · 1 评论 -
找工作知识储备(3)---从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
作者:寒小阳时间:2013年9月。出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251。声明:版权所有,转载请注明出处,谢谢。0、前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算转载 2015-08-01 01:28:46 · 905 阅读 · 0 评论 -
单链表实现插入排序
这里给出了一种单链表插入排序的实现。另一种类似的实现参见《C算法(第一卷:基础、数据结构、排序和搜索)(第三版)》程序3-11。 #include #include typedef struct list LIST;typedef LIST *link; struct list{ int item;转载 2015-08-01 01:28:27 · 1079 阅读 · 0 评论 -
优化的直接插入排序(二分查找插入排序,希尔排序)
优化的直接插入排序(二分查找插入排序,希尔排序) 本博文向大家介绍了插入排序的三种实现:直接插入排序,二分查找插入排序,希尔排序。详细分析的其实现过程、时间复杂度和空间复杂度、稳定性以及优化改进策略。最后简单的做了下性能测试。 直接插入排序(一)概念及实现直接插入排序的原理:先将原序列分为有序区和无序区,然后再经过比较和后移操作将无序区元素插入到有序区中。转载 2015-08-01 15:45:57 · 1276 阅读 · 0 评论 -
Linux Socket编程(不限Linux)
话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。转自:http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服转载 2015-07-17 10:30:28 · 318 阅读 · 0 评论 -
Cache和Buffer的区别
1. Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。 Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache转载 2015-07-16 23:53:53 · 439 阅读 · 0 评论 -
TCP通信的三次握手和四次撒手的详细流程(顿悟)
TCP(Transmission Control Protocol) 传输控制协议三次握手TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(ur转载 2015-07-17 10:16:24 · 573 阅读 · 0 评论 -
网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
转自:http://blog.chinaunix.net/uid-28458801-id-4464639.html同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-转载 2015-07-16 23:47:29 · 575 阅读 · 0 评论 -
关于i++和++i以及左值,右值
原本一直对i++和++i的区别不是很在意,觉得i++就是先用了i的值(用于赋值之类的操作),再i自加1. 而++i就是把i的值先自加1再用作其他操作. 很多人都问类似于j=++i+++i+i;之类的题目,个人觉得除了有些变态的学校的变态的考试会考.其他根本用不到.如果你在实际写代码的时候这样写,不但是给自己找麻烦,以后代码维护时,你也会被人在心里诅咒很久的...转载 2015-07-08 13:05:18 · 632 阅读 · 0 评论 -
c语言中的isalpha,isdigit,islower,isupper等一系列函数
isalnum(测试字符是否为英文或数字)相关函数isalpha,isdigit,islower,isupper表头文件#include定义函数int isalnum (int c)函数说明检查参数c是否为英文字母或阿拉伯数字,在标准c中相当于使用“isalpha(c) || isdigit转载 2015-07-07 22:25:28 · 2005 阅读 · 0 评论 -
sprintf函数的用法
int snprintf(char *restrict buf, size_t n, const char * restrict format, ...);函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。Result1(推荐的用法)#i转载 2015-07-07 15:04:41 · 400 阅读 · 0 评论 -
C代码中如何调用C++ C++中如何调用C
C代码中如何调用C++ C++中如何调用C注意这里的C调用C++或者C++调用C意思是.c文件中调用.cpp文件中代码,或者相反。集成开发环境如VC++6.0或者vs都是以文件后缀来区别当前要编译的是C代码还是C++代码,然后采用响应的编译、调用协议等。使用extern "C" 主要是因为C编译器编译函数时不带参数的类型信息,只包含函数的符号名字。如 int foo(转载 2015-07-07 14:32:26 · 553 阅读 · 0 评论 -
malloc/free与new/delete的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不转载 2015-07-22 20:26:17 · 353 阅读 · 0 评论 -
程序在内存中的分布
BSS段:(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文BlockStarted by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(datasegment)通常是指用来存放程序中 已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(codesegment/text segment)通常转载 2015-07-23 17:35:50 · 1586 阅读 · 0 评论 -
Hash算法冲突解决方法分析
就不自己写了,直接贴下吧看了ConcurrentHashMap的实现, 使用的是拉链法.虽然我们不希望发生冲突,但实际上发生冲突的可能性仍是存在的。当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时。冲突就难免会发 生。另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记录,不仅发生冲突,而且还会发生溢出。因此,处理冲突和溢出是 哈希技转载 2015-07-23 20:41:40 · 397 阅读 · 0 评论 -
c语言全局变量和局部变量问题汇总
1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。要用全局变量,需要使用"::"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。2、如何引用一个已经定义过的全局变量?答:extern转载 2015-10-17 12:05:38 · 1219 阅读 · 0 评论 -
gcc __attribute__ ((weak, alias (#name)))
本系列文章,着重讲__attribute__的用途 此属性,可以借助uClibc里面的弱符号来对库里符号进行一些更改,可以用于调试,我最近就用这个功能来调试system,很好用,类似可以实现hook函数的还有LD_PRELOAD,参见 http://blog.csdn.net/green369258/article/details/7314298转载 2015-09-30 12:13:57 · 1777 阅读 · 0 评论 -
C语言宏定义中#与##运算符
#运算符 宏定义可以包含两个专用的运算符:#和##。编译器不会识别这两个运算符,他们会预处理时被执行。 #运算符将宏的一个参数转换为字符串字面量。它仅允许出现在带参数的宏的替代列表中。(#运算符所执行的操作可以理解为“字符串化(stringization)”). #运算符有许多用途,这里只来讨论其中的一种。假设我们决定在调试过程中使用PRINT_INT宏作为一个便捷的方法来输出整转载 2015-09-29 23:22:00 · 1535 阅读 · 0 评论 -
在一个文件中有10G个整数,乱序排列,要求找出中位数
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。关于中位数:数据排序后,位置在最中间的数值。即将数据分成两部分,一部分大于该数值,一部分小于该数值。中位数的位置:当样本数为奇数时,中位数=(N+1)/2 ; 当样本数为偶数时,中位数为N/2与转载 2015-08-06 18:12:38 · 860 阅读 · 0 评论 -
桶排序算法详解
1. 桶排序介绍桶排序(Bucket sort)是一种基于计数的排序算法,工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。当要被排序的数据内的数值是均匀分配的时候,桶排序时间复杂度为Θ(n)。桶排序不同于快速排序,并不是比较排序,不受到时间复杂度 O(nlogn) 下限的影响。桶排序按下面4步进行:转载 2015-08-06 17:15:30 · 11827 阅读 · 1 评论 -
HASH表的实现(拉链法) - C/C++
本文的一些基本概念参考了一部分百度百科,当然只保留了最有价值的部分,代码部分完全是自己实现!简介哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,有点类似于数组,并且能在O(1)(冲突情况另算)下查找到元素。 基本概念设所有可能出现的关键字集合记为u(简称全集)。实际发生(即实转载 2015-08-05 19:34:47 · 5820 阅读 · 3 评论 -
c语言运算符优先级,结合性(左/右结合详解)
重新翻了遍c语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题。什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的?本文将围绕这几个问题展开..(小白文,大神绕道)先附录几个自己学习过程中的参考网站。(有些见解和例子来自一下网站)http://wenku.baidu.com/link?url=W2ofiBx4yEtrx转载 2015-08-05 18:44:15 · 2080 阅读 · 0 评论 -
typedef(自定义数据类型)与#define(宏定义)用法比较(前者定义指针比define好用)---(转载)
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,以下是引用的内容(红色部分是我自己写的内容)。用途一:定义一种类型的别转载 2015-07-24 22:04:43 · 3949 阅读 · 0 评论 -
C语言的inline
C语言的inline转以前我用Docbook写的一篇关于C语言inline关键字使用的文章。唉,要是能用docbook直接写Blog就好了。用得越多发现Docbook这个东西真是越好用啊~~ 本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(D转载 2015-07-24 21:45:40 · 426 阅读 · 0 评论 -
C语言中内联函数的作用 inline
C语言中内联函数到底有什么作用?试想一下,每当我们在假设就在主函数中调用另外一个函数的时候,那么这个函数就要入栈或者出栈,比如说下面的一个例子: 点击(此处)折叠或打开Void myprint(){Printf("%d",3);}Void main(){转载 2015-07-24 21:42:20 · 11965 阅读 · 3 评论 -
树状数组 详解
对于普通数组,其修改的时间复杂度位O(1),而求数组中某一段的数值和的时间复杂度为O(n),因此对于n的值过大的情况,普通数组的时间复杂度我们是接受不了的。在此,我们引入了树状数组的数据结构,它能在O(logn)内对数组的值进行修改和查询某一段数值的和。树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组a[1..n],那么查询a[1]+...+a[n]的时间是log级别的,转载 2015-08-04 23:06:18 · 834 阅读 · 0 评论 -
树状数组 求逆序数
树状数组 求逆序数 poj 2299这里说的很好,把求逆序的步骤说的很明白,我也是看完才懂的,之前自己想了很久就是不明白为什么可以用树状数组求逆序 转载:树状数组,具体的说是 离散化+树状数组。这也是学习树状数组的第一题.算法的大体流程就是:1.先对输入的数组离散化,使得各个元素比较接近,而不是离散的,2.接着,运用树状数组的标准操作来累计数组的逆序数。算法详细解转载 2015-08-04 23:04:43 · 445 阅读 · 0 评论 -
C语言中strcpy,strcmp,strlen,strcat函数原型
char *strcpy(char *strDest, const char *strSrc){ char *address=strDest; assert((strDest!=NULL) && (strSrc!=NULL)); while(*strSrc!='\0') { *strDest++=转载 2015-07-06 12:37:21 · 487 阅读 · 0 评论 -
extern与头文件(*.h)的区别和联系 和学习体会
原文网址为:http://lpy999.blog.163.com/blog/static/117372061201182051413310/个人认为有一些道理:所以转过来学习了。用#include可以包含其他头文件中变量、函数的声明,为什么还要extern关键字? 如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include (xxx.h包含了a转载 2015-07-14 10:50:39 · 1123 阅读 · 0 评论 -
* linux下编译,链接,运行,汇编程序
当前使用的操作系统:ubuntu11.10汇编程序由定义好的段构成,每个段都有不同的目的,三个最常用的段: 1)data 段 汇编程序 data(数据)段是可选的。 数据段声明带有初始值的数据元素,这些数据元素用作汇编程序的变量。 2)bss 段转载 2015-07-11 11:00:06 · 676 阅读 · 0 评论 -
纸上谈兵: 树, 二叉树, 二叉搜索树
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 树的特征和定义树(Tree)是元素的集合。我们先以比较直观的方式介绍树。下面的数据结构是一个树:树有多个节点(node),用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边(edge)。边的上端节点称为父节点,下端称为子节点。树像是一个不断分叉的树转载 2015-07-25 15:22:25 · 362 阅读 · 0 评论 -
C语言中的sizeof
在CU的C/C++版看到一个例子:http://bbs.chinaunix.net/thread-3621056-1-1.html#include stdio.h>struct A{ char a; char b; int c[0];};struct B{转载 2015-07-11 10:45:44 · 618 阅读 · 0 评论 -
读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
原文链接:C语言结构体里的成员数组和指针复制如下:单看这文章的标题,你可能会觉得好像没什么意思。你先别下这个结论,相信这篇文章会对你理解C语言有帮助。这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接。微博截图如下。我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章。为了方便你把代码copy过去编译和调试,我把代码列在下面:转载 2015-07-11 23:40:30 · 724 阅读 · 0 评论 -
struct和typedef struct彻底明白了
struct和typedef struct分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student s转载 2015-07-10 18:05:35 · 350 阅读 · 0 评论 -
下列程序运行时会崩溃,请找出错误并改正,并且说明原因
下列程序运行时会崩溃,请找出错误并改正,并且说明原因。#include stdio.h> #include malloc.h> typedef struct{ TNode* left; TNode* right; int value; } TNode; TNode* root=NULL; void append(int N转载 2015-07-10 18:00:03 · 1031 阅读 · 0 评论 -
在结构体最后定义一个长度为0的字符数组(技巧)
最近看tty驱动源码,发现了一个以前老板上课时讲过的一个c语言技巧,不是很理解,上网学习了一下,总结如下: 在linux源码里struct tty_buffer { struct tty_buffer *next; char *char_buf_ptr; unsigned char *flag_buf_ptr; int used; int size;转载 2015-07-02 02:19:08 · 3208 阅读 · 0 评论 -
为什么(i++)不能做左值,而(++i)可以
算下来已经很久以前了,大概有那么几个星期了吧。看到了帖子上有人问为什么下面的语句的对错原因int i = 0;int *ip = &(i++); //错误int *ip = &(++i); //正确看到上面的语句,当时以为两个都是是对的啊,可是当我用VS2010的编译器试了试之后,才发现第一个取地址确实是错误的语句,具体的提示是:error C2102: “&”转载 2015-07-08 18:37:18 · 611 阅读 · 0 评论 -
++i在C、C++中是不是左值?
前些天写blog左值与右值(C++学习)时,已经确认在C++中,++i 是左值。可是,今天在newsmth的C语言版上看到一个相关的问题。发现在C语言中,++i不是左值。例子一个很简单的例子:int main(){ int i = 0; ++i = 5; return 0;}保存成 hello.c ,分别用 gcc、clang、cl、转载 2015-07-08 18:34:13 · 702 阅读 · 0 评论 -
GetMemory错误讲解(指针练习)----C++面试之GetMemory问题
错误程序:void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( “%s”,str );} 这个一个转载 2015-07-08 17:12:08 · 769 阅读 · 0 评论