11 2011 档案
摘要:在C和C++语言开发中,指针、内存一直是学习的重点。因为C语言作为一种偏底层的中低级语言,提供了大量的内存直接操作的方法,这一方面使程序的灵活度最大化,同时也为bug埋下很多隐患。 因此,无论如何,我们都要对内存有一个清晰的理解。一、对内的分配 32位操作系统支持4GB内存的连续访问,但通常把内存分为两个2GB的空间,每个进程在运行时最大可以使用2GB的私有内存(0x00000000—0x7FFFFFFF)。即理论上支持如下的大数组:char szBuffer[2*1024*1024*1024]; 当然,忧郁在实际运行时,程序还有代码段、临时变量段、动态内存申请等,实际上是不可能用到上述那么.
阅读全文
摘要:要理解一个C程序,仅仅理解组成该程序的符号是不够的。程序员还必须理解这些符号是如何组合成声明、表达式、语句和程序的。 我们先来看看下面的一个语句:( *( void(*)())0)(); 这是当计算机启动时,硬件将调用首地址为0位置的子例程。像这样的表达式恐怕会令每个C/C++程序员的内心都“不寒而栗”吧。 然而,完全不用害怕,任何C变量的声明都是由两部分组成:类型以及一组类似表达式的声明符。最简单的声明变量,如:float f , g ; 这个声明的含义是:当对其求值时,表达式f和g的类型为浮点型。 同样的逻辑也适用于函数和指针类型的声明,例如:float ff(); 这个声明的含义是:表.
阅读全文
摘要:术语“符号”指的是程序的一个基本组成单元,其作用相当于一个句子中的单词。在程序中,符号就是程序的一个基本信息单元。而组成符号的字符序列就不同,同一组字符序列在某个上下文环境中属于一个符号,而另一个上下问环境中可能属于完成不用的另一个符号。1.1 =不同于== 在C语言中符号=作为赋值运算,符号==作为比较,一般而言赋值运算相对于比较运算出现得更频繁,因此字符较少的符号=就被赋予了更常用的含义——赋值操作。此外,在C语言中赋值符号被作为一种操作符对待,因而重复进行赋值操作(如a=b=c)可以很容易地书写,并且赋值操作还可以被嵌入到更大的表达式中。 但是,这种使用上的便利性可能导致一个潜在的问题.
阅读全文
摘要:基本上求职者进行笔试时没有不考字符串的。字符串也是一种相对简单的数据结构,容易引起面试官反复发问。事实上,字符串也是考验程序员编程规范和编程习惯的重要考点。不要忽视这些细节,因为这些细节会体现你在操作系统、软件工程、边界内存处理等方面的知识掌握能力,也会成为企业是否录用你的参考因素。1、怎样将整数转换成字符串数,并且不用函数 itoa ? 答案:#include <iostream>using namespace std;int main (){ int num =12345,i=0,j=0; char temp[7],str[7]; while(num) { temp[i]=nu
阅读全文
摘要:1、排序方法 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。 (1)初始 R[1..n]为无序区。 (2)第一趟扫描 从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].key
阅读全文
摘要:1、已知n个人(以编号1,2,3,...,n分别表示)围坐在一张圆桌周围,从编号为k的人开始报数,数到m的那个人出列,他的下一个人又从k开始报数,数到m的那个人出列,依次重复下去,直到圆桌的人全部出列。试用C++编写实现。 解析:本题就是约瑟夫环问题的实际场景,要通过输入n、m、k三个正整数,求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素: p->link=head; 解决问题的核心步骤如下: (1)建立一个具有n个链节点、无头节点的循环链表。 (2)确定第一个报数人的位置。 (3)不断的从链表中删除链节点,直到链表为空。 答案:#incl
阅读全文
摘要:接下来我会介绍C++面试题中第二个重要的板块——数据结构,主要包括字符串的使用、堆、栈、排序方法等,今天我们先来看单链表。 1、编程实现一个单链表的建立/测长/打印。 答案: #include<iostream>using namespace std;//单链表结构体typedef struct student{ int data; struct stud...
阅读全文
摘要:整个C++程序设计全面围绕面向对象的方式进行。类的继承特性是C++的一个非常重要的机制。继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需在新类中增加原有类没有的成分。 在面试过程中,各大企业会考量你对虚函数、纯虚函数、私有继承、多重继承等知识点的掌握程度,因此就有了我们这一节的内容,开始吧。 1、以下代码的输出结果是什么? #include<iostream>...
阅读全文
摘要:说到面向对象,大家第一反应应该就是它的三大特性:封装性、继承性和多态性。那么我们先简单的了解一下这三大特性: (1)封装性:封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 在C++中类中成员的属性有:public, protected, private,这三个属性的访问权限依次降低。 (2)继...
阅读全文
摘要:1、下面这个程序测试会有什么结果? #include<iostream>using namespace std;void GetMemory(char *p,int num){ p=(char *)malloc(sizeof(char) * num);}int main (){ char *str = NULL; GetMemory(str,100); strcpy(str,"hello"); ...
阅读全文
摘要:指针是C系语言的特色。指针是C++提供的一种颇具特色的数据类型,允许直接获取和操纵数据地址,实现动态存储分配。 指针问题,包括常量指针、数组指针、函数指针、this指针、指针传值、指向指针的指针等,这些问题也是各大公司常备考点,下面让我们一起学习其中的重点与难点。1、指针与引用的区别?答案:(1)非空区别。在任何情况下都不能使用指向空值的引用。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。不存在指向空值的引用.
阅读全文
摘要:大四了,开始找工作了,发现很多公司软件开发类的笔试题都是考C++的,所以最近总结一下看到的一些题。 然而,预处理、const和sizeof问题是C++语言中的几个重点也是难点,也是各大企业不论是笔试还是面试都喜欢出的题型,下面是个人从网上和书籍中收集或总结的一点资料。希望能跟和我一样在辛苦找工作的同学们共同分享,也愿以下资料能帮到你找到合适满意的工作。1、用预处理指令#define声明一个常数,用以表明一年中有多少秒(忽略闰年的问题)解析:1.#define语法的基本知识(例如,不能以分号结束,括号的使用等) 2.要懂得预处理器将为你计算常数表达式的值,因此,写出你是如何计算一年中有多少秒而.
阅读全文
摘要:本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。那我们看看下面的语句能否互换:1.static readonly TestClass test1=new TestClass();2.static readonly TestClass test2=null;3.static readonly a=20*b; static readonly b=2;4.static readonly int[] array=new int[]{1,2,3,4,5};5.void...
阅读全文