![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 77
frido123
腾讯,负责海量Cache平台,参与微信红包、滴滴打车、微信支付等架构优化
展开
-
数组和指针并不相同
很多东西都忘记了,所以复习一下《c专家编程》,读者可下载原书来看,一本不错得书。问题一 下面两中声明得区别是什么?extern int *x;extern int y[];答案:第一条语句声明x是int型得指针;第二条语句声明y是个int型得数组,长度尚未确定(不完整类型),其存储在别处定义。 文件1:int mango[10];//定义类型为int [10]的一个原创 2013-10-31 11:52:42 · 462 阅读 · 0 评论 -
extern “C”
1. 在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”? (5分)答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。C++提供了C连接交原创 2013-10-31 11:53:11 · 391 阅读 · 0 评论 -
程序效率
1. 请简述以下两个for循环的优缺点(5分)for (i=0; i{if (condition) DoSomething();else DoOtherthing();}if (condition){for (i=0; i DoSomething();}else{ for (i=0;原创 2013-10-31 11:53:13 · 451 阅读 · 0 评论 -
晦涩的语法
1. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么? Int a = 5, b = 7, c; c = a+++b;这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最左处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成: C++编译器在处理时尽可原创 2013-10-31 11:53:42 · 545 阅读 · 0 评论 -
面试题--找单数
面试时曾被问道,如果有一组数两两相同,而有一个落单,怎么求这个数。 一时没想到用异或,偶尔碰到一个同学聊了一会,恍然大悟。 然后又遇到一个题,如果有两个落单的呢,见一个高手的回复,对他真是赞不绝口啊,果然是人外有人,天外有天。不服都不得行了。。。 /*1.找单数(30%) 给定一个含有n个数的序列,这个序列中恰好有两个数出现一次,请你找出这两数。(假定原创 2013-10-31 11:54:25 · 636 阅读 · 0 评论 -
10个数选5个,打印所有组合情况
#include iostream>/*10个数,取5个,打印出所有可能的组合,假设不考虑重复数字*/const int L=10; //10个数字const int C=5;//选5个int *x;/*偏移数组,后一个数相对于前一个数偏移的距离,至少为1比如1,2,3选两个数可能的情况 对应的x数组1 2 0 11 3 0 22 3 1 1*/bool原创 2013-10-31 11:54:43 · 6283 阅读 · 0 评论 -
搜集一些面试题资料
快该找工作了,特此在博客中添加一些面试题的资料,对学习编程和找工作都有所帮助,希望大家都能找到好的工作,资料均从网上搜集,来源复杂,出处就不注明了。 为了方便,我尽量将试题进行分类,好让大家有针对性的进行学习。 管理员在2009年8月13日编辑了该文章文章。 --> -原创 2013-10-31 11:53:06 · 519 阅读 · 0 评论 -
字符串操作
1. 编写strcpy函数(10分)已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串,strSrc是源字符串。(1)不调用C++/C的字符串库函数,请编写函数 strcpychar *strcpy(char *strDest, const c原创 2013-10-31 11:53:17 · 470 阅读 · 0 评论 -
嵌入式死循环
1. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的 基本原理。如果他们的基本答案是:“我被教着这样做,但从没有想到过为什么。”这会给我原创 2013-10-31 11:53:22 · 1753 阅读 · 0 评论 -
变量声明
用变量a给出下面的定义 a) 一个整型数(An integer) b) 一个指向整型数的指针(A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer) d) 一个有10个整型数的数组(An array of 10 integers) e) 一个有10个指针的数组,该指针是指原创 2013-10-31 11:53:24 · 488 阅读 · 0 评论 -
static
1. 关键字static的作用是什么?这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函原创 2013-10-31 11:53:26 · 425 阅读 · 0 评论 -
字长
1. 评价下面的代码片断:unsigned int zero = 0; unsigned int compzero = 0xFFFF; /*1's complement of zero */对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:unsigned int compzero = ~0;这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序原创 2013-10-31 11:53:37 · 514 阅读 · 0 评论 -
链表逆序
假设链表为a->b->c->d逆序后为d->c->b->a #include stdio.h>#include stdlib.h>typedef int Type;typedef struct Node{ Type data; struct Node *next;}Node;void insert(Type data,Node **head){//插入原创 2013-10-31 11:54:18 · 511 阅读 · 0 评论 -
蓝港在线面试题
因为小马的推荐,蓝港竟然给了我一次面试的机会。。。先让我做了个卷子,然后问了一些我的情况。下面把所问到的问题和做的卷子里的题,如下。竟然都记得还很清晰。笔试题逻辑题:1. 1+13X*X=Y*Y ,求X,Y整数值2.两个3,两个8,只许用+-*/()让他们一次等于243.12升水,有个9升,和5升的空桶,让你取出6升水4.13个球,有一质量不同,称三次,称出来5.M个人,有原创 2013-10-31 11:54:34 · 1738 阅读 · 0 评论 -
网龙笔试
1.“ABC DEF GH.\nabc def gh.”反序为“GH. DEF ABC\ngh. def abc”即,以单词为单位进行反序,按行进行。标点符合不反序2.a.写一链表类,具有添加元素,初始化功能 b.链表反序3.简答C++有哪些方式的继承,对各基类属性有什么影响?C++有哪些类型转换方式,各用在哪里?什么情况下能进行隐式数据类型转换?C++里面的内存原创 2013-10-31 11:54:36 · 976 阅读 · 0 评论 -
网龙面试后的思考----开始读C++ primer
面试时,所问到的东西。1.接口定义的规范是什么?2.stl中map的原理,和时间复杂度是什么?3.mfc中document类和view类联系4.函数重载5.函数覆盖,函数覆盖与虚函数之间的关系很久之前就听人建议C和C++精通一个就行,算法才是灵魂,而去网龙面试却问到这么多我不擅长的东西。直接出局了。由于个人原因,导致我丧失了一次一次机会,我也很是遗憾。其实里面有些公司,还是很对我的胃口原创 2013-10-31 11:54:38 · 694 阅读 · 0 评论 -
再说链表逆序
有时碰到一些刁难程序员的问题,今天就碰到了一个。用递归实现链表逆序,zuii同学提到这个问题,我研究了一下,发现没那么容易写,容易出现死循环。继续我C语言风格的代码: #include stdio.h>#include stdlib.h>#include time.h>const int M=10;typedef int Type;typedef struct Node原创 2013-10-31 11:54:40 · 588 阅读 · 0 评论 -
const
1. const 有什么用途?(请至少说明两种)(5分)答:(1)可以定义 const 常量(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。2. 关键字const是什么含意? 我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文原创 2013-10-31 11:53:09 · 406 阅读 · 0 评论 -
指针和数组一致的情况及二维数组初始化
参见《c专家编程》第9章1.做为形参,二者可以换用,形参是指函数声明或者定义时的参数。int *a;int a[];2.数组属于传址调用,不同传值调用,它传的只是指针,这是出于性能的考虑实例func(int *a);func(int a[]);func(int a[200]);//上面作为形参,都看作传递指向int数组的第一个元素的指针。三种形式完全相同原创 2013-10-31 11:52:44 · 655 阅读 · 0 评论 -
c/c++编程风格
1. 编程风格请写出 BOOL flag 与“零值”比较的 if 语句。(3分)标准答案: if ( flag ) if ( !flag )如下写法均属不良风格,不得分。 if (flag == TRUE) if (flag == 1 ) if (flag == FALSE)原创 2013-10-31 11:53:00 · 587 阅读 · 0 评论 -
sizeof
1. 以下为Windows NT下的32位C++程序,请计算sizeof的值(10分) char str[] = “Hello” ; char *p = str ;int n = 10;请计算sizeof (str ) = 6 (2分) sizeof ( p ) = 4原创 2013-10-31 11:53:02 · 431 阅读 · 0 评论 -
宏和预处理器
1、头文件中的 ifndef/define/endif 干什么用?(5分)答:防止该头文件被重复引用。2、#include 和 #include “filename.h” 有什么区别?(5分)答:对于#include ,编译器从标准库路径开始搜索 filename.h 对于#include “filename.h” ,编译器从用户的工作路径原创 2013-10-31 11:53:04 · 430 阅读 · 0 评论 -
内存管理
1. 有关内存的思考题(每小题5分,共20分)void GetMemory(char *p){p = (char *)malloc(100);}void Test(void) {char *str = NULL;GetMemory(str); strcpy(str, "hello world");printf(str);}原创 2013-10-31 11:53:15 · 451 阅读 · 0 评论 -
类的构造函数、析构函数、赋值函数
1. 编写类String的构造函数、析构函数和赋值函数(25分)已知类String的原型为: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数原创 2013-10-31 11:53:20 · 541 阅读 · 0 评论 -
volatile
1. 关键字volatile有什么含意 并给出三个不同的例子。一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的原创 2013-10-31 11:53:29 · 435 阅读 · 0 评论 -
位操作
1. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。对这个问题有三种基本的反应 1). 不知道如何下手。该被面者从没做过任何嵌入式系统的工作。 2). 用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了原创 2013-10-31 11:53:31 · 499 阅读 · 0 评论 -
类型转换
1.嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa55。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下: int *ptr; ptr = (int *)原创 2013-10-31 11:53:33 · 534 阅读 · 0 评论 -
中断
1. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。__interrupt double compute_area (double radius) { double area = PI * ra原创 2013-10-31 11:53:35 · 522 阅读 · 0 评论 -
typedef
1. typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子: #define dPS struct s * typedef struct s * tPS; 以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么? 这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当原创 2013-10-31 11:53:40 · 785 阅读 · 0 评论 -
C++引用
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名 说明: (1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是指目标变量的类型。 (3)声明引用时,必须同时对其进行初始化。 (4)引用声明完毕后,相当于目标变量原创 2013-10-31 11:54:11 · 545 阅读 · 0 评论 -
排序
/*快速排序*1.分解:将x[low:high]分为3段,x[low:pivotkey-1]*x[pivotkey],x[pivotkey+1:high]三段,使得*x[low:pivotkey-1]的所有元素小于等于x[pivotkey]*x[pivotkey+1,high]的所有元素大于等于x[pivotkey]*2.递归求解:分别对x[low:pivotkey-1],x[pivotkey+1原创 2013-10-31 11:54:16 · 474 阅读 · 0 评论 -
字符串查找与过滤
今天和一爱学习的技术MM聊天,关于怎样插入链表节点的,她把节点插在链表尾部,我给她提供了插入在首部的方法,更简洁,然后她回了句“我的是最笨的(附带大哭的QQ表情)”,突然想给她开个玩笑,于是回了句char tmp[10];char *test="我的是最最笨的";strcpy(tmp, strtok(test, "的"));strcat(tmp, strtok(NULL, "的"));程序员式的幽原创 2013-10-31 11:54:27 · 703 阅读 · 0 评论 -
深信服笔试题
题很多,共8页1.sort(int array[], int n);//排序,让小于等于0的数放在左边,大于0得数放在右边,要求时间复杂度为O(n);2.假设有1001个棋子,你和一个人拿这些棋子,谁拿到最后一个,算谁赢,每次只能拿1,2,4个棋子。你先出手,是否有把握必赢,如果没有,说明为什么。3.编写atoi,itoa程序。4.判断一个数是2的N次幂,要求用速度最快的方法。原创 2013-10-31 11:54:45 · 1365 阅读 · 0 评论 -
使用libnet构造ARP响应包
//编译方式gcc arp.c -lnet//arp.c#include stdio.h>#include libnet.h>#define MAC_ADDR_LEN 6#define IP_ADDR_LEN 4//向同一网络内所有机器发送ARP REPLY包,告诉他们,23.23.23.2Z在00:df:17:17:17:f2那里int main(int argc, char *argv原创 2013-10-31 11:54:56 · 1282 阅读 · 0 评论 -
数组和指针的类型转换
每次遇到这一块都容易糊涂。于是再澄清一下:int **m;//m是二级指针int (*n)[5];//n是数组指针,是指向int [5]的指针,和函数指针写法类似int *o[3];//o是包含3个int指针的数组int *p[5];//p是包含5个int指针的数组int q[3][5];//3行5列的二维数组 指针的赋值操作 m=n;//错误; int原创 2013-10-31 11:52:40 · 1772 阅读 · 0 评论 -
UDP server
学习网络编程时所写的一些代码,由于工作较忙,没太多功夫整理,也基本没有注释,如有疑问希望自己去查手册。这些程序都在linux下写的。//使用recvmsg,和sendmsg进行收发//udp-server2.c#include stdio.h>#include stdlib.h>#include sys/types.h>#include netdb.h>#include sys/soc原创 2013-10-31 11:54:54 · 1221 阅读 · 0 评论