C/C++程序设计
collier
计算机专业硕士研究生,酷爱linux等开源技术,爱好文学、书法艺术……非淡泊无以明志,非宁静无以致远,愿每一个有志之士早日实现自己的人生梦想!
展开
-
一个程序员面试题目的简单分析
下面这个简短的程序来自于《程序员面试宝典》指针部分,是美国一著名计算机嵌入式公司的面试题。且看程序:--------------------------------------------------------------------------------------------#includeusing namespace std;char *GetMemory(void){ char p[]="hello"; return p;}void main(){原创 2010-08-21 15:42:00 · 1313 阅读 · 1 评论 -
和字符串相关的几个面试题目
一、编写程序实现字符串反转输出//实现字符串反转输出#include #include #include void f(char *src){ int len=strlen(src); char *s,*d,*dest; //s指向字符串的最后一个字符 s=&src[len-1]; //动态分配内存存放反转后的字符串,注意不要忘了给字符串结束标识符分配空间 dest=(char *)malloc(len+1); d=dest; //指向反转后的字符串的指针原创 2010-09-28 14:08:00 · 852 阅读 · 0 评论 -
C语言常用排序详解
一、相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定义):1、稳定排序和非稳定排序 简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就说这种排序方法是稳定的。反之,就是非稳定的。 比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5,则我们说这种排序是稳定的,因为a2排序前在a4的前面,排序后它还是在a4的前面。假如变成a1,a4,a2,a3,a5就不是稳定的了。2、内排序和外排序 在排序过程中,所有需要转载 2010-09-24 11:23:00 · 761 阅读 · 0 评论 -
面试中常考的一类特殊的交换题目
1、There are two int variables : a and b , don't use "if","? :","switch" or other judgement statements , find out the biggest one of the two numbers.程序如下:------------------------------------------------------------#include int main(){ int a , b ,c; un原创 2010-09-24 15:58:00 · 884 阅读 · 0 评论 -
几个需要引起注意的面试题
1、如何判断一段程序是由C编译程序还是由C++编译程序编译的?答案:C++编译时定义了_cplusplus,C编译时定义了_STDC_。------------------------------------------------------2、在C++程序中调用C编译器编译后的函数,为什么要加extern “C” ?答案:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。如假设某个函数原型为:void foo(int x,int y),则该函数被C编译器编译后原创 2010-09-24 21:50:00 · 648 阅读 · 0 评论 -
类型隐式转换
台湾某著名CPU生产公司2005年招聘中有一个面试题为:下面程序的结果是什么?char foo(void){ unsigned int a=6;int b=-20;char c;(a+b>6)?(c=1):(c=0);return c;}------------------------------------------------------解析:结果为1。这是因为无符号数(unsigned int)和有符号数(int)相加,系统会自动把有符号数转化为无符号数类型(unsigned int)。因此题原创 2010-09-24 19:27:00 · 572 阅读 · 0 评论 -
关于字符的一道很容易做错的题目
看下面程序:#includeint main(){ char a[1000]; int i,j; for(i=0;i a[i]=-1-i; printf("%d/n",strlen(a)); return 0;}请问上述程序的输出结果是什么?答案是255。解答该题需要主要以下几点:1、 数据在机器中是如何存取的?数据在机器中是以补码形式存放的。正数的补码和其原码一致,负数的补码符号位为1,其余位为该数绝对值的原码各位取反原创 2010-09-04 17:41:00 · 658 阅读 · 0 评论 -
当a为数组时a和&a还是有区别的
<br /> 假设有int a[];那么a实际上是数组a的首元素a[0]的首地址,而&a是数组的首地址,其值和&a[0]相等,但是两者的意义不同,这一点可以从指针的移动运算方面得到验证。且看下面程序:<br />#include<stdio.h><br />int main()<br />{<br /> int a[5]={1,2,3,4,5};<br /> int *ptr=(int *)(&a+1);//强制类型转换,将其转换为指向整型变量的指针(也可以不转换)<br />原创 2010-09-06 11:57:00 · 2130 阅读 · 1 评论 -
sizeof的那些事
一、sizeof是关键字而不是函数Sizeof是C语言中32个关键字中的一个,注意它是关键字而不是函数!举个例子:int I;A sizeof(int) B sizeof(i) C sizeof int D sizeof i在32位机器上的VC6.0编译器下测试下可知A、B、D的值都是4,而C选项是一种错误的表示方法,在编译器下会报错。D选项足以证明sizeof是一个关键字而非函数,试想如果是函数的话会容许你不将参数用括号括起来吗?那么C选项为什么是错误的呢?原因和简单。Int是一个类型,前面再加个原创 2010-09-04 16:00:00 · 892 阅读 · 0 评论 -
关于四个swap函数的归类
在学习C语言函数那一章节的时候我们第一次认识了swap。当时书上举这个例子是为了说明函数的“单向值传递”原理,即在函数调用的时候,实参总是将自己的值单向传递给形参,而不能反过来,并且在这个过程中形参的改变不会导致实参的改变。后来,我们又学习了指针,然后知道在函数调用的时候,实参还可以是一个变量的地址或者指针,即所谓的传址,并且知道传址调用过程中形参的改变会导致实参变化。再后来,我们还学习了C++程序设计语言,了解到在C++中还有一种函数参数的传递方式即“引用调用”,而且引用调用过程中形参的变化也会引原创 2010-09-04 09:57:00 · 4140 阅读 · 0 评论 -
访问数组元素的方法小结
<br />一)、一维数组和指针<br />若有以下语句:<br />int *p,s[10],I;<br />p=s;<br />则s[i]的地址可用下面三种方法表示:<br />(1)&s[i] (2) s+i (3)p+i。<br />因此可以用s[i],*(s+i),*(p+i)来表示s[i]。由于s[i]可以用表达式*(s+i)来表示,同理*(p+i)也可以用p[i]来表示。事实上在c语言中,[]并不仅仅是用作表示数组元素的记号,而是一种运算符。因此当p指向数组s的首地址时,表示数原创 2010-09-14 14:43:00 · 4742 阅读 · 0 评论 -
关于static之一二三
学过C或者C++程序设计语言的同学一定对关键字static不是很陌生,但是是否对其非常熟悉,熟练掌握其用法,把握其本质和精华,我想大部分同学未必如此。static是c语言32个关键字中的一员,造成大家对它掌握不是很深刻的原因我想可能是在平时学习或者实际编程中对它用得较少。为了全方位揭开static这个关键字的庐山真面目,下面我结合若干文献做一小结。一、static在C语言中的作用Static作为关键字,它可以用来修饰变量和函数,在C语言中其作用总体来说有两个。其一是起到信息隐藏的作用,即将变量或者函数的作用原创 2010-09-02 18:57:00 · 846 阅读 · 0 评论 -
一个很容易忽视的死循环例子
<br /> 平时大家看书学知识的时候往往会有种错觉,就是认为那些最基础不过的知识点自己应该早就掌握好了,这样就很容易导致一种结果——书本是看完了,然而却只不过是一个简单的走马观花,让知识在大脑中重现了一次而已,并没有加深对知识的理解,那么这样就会很容易在最简单、最基础的地方栽跟头。<br /> 且看下面一个关于死循环的粒子,据说还是华为公司招聘的一个考题:<br />----------------------------------------------------------------原创 2010-08-21 15:05:00 · 2980 阅读 · 0 评论 -
螺旋队列
21 22 23 24 2520 7 8 9 1019 6 1 2 1118 5 4 3 1217 16 15 14 13 看清以上数字排列的规律,设1点的坐标是(0,0),x方向向右为正,y方向向下为正.例如:7的坐标为(-1,-1) ,2的坐标为(0,1),3的坐标为(1,1).编程实现输入任意一点坐标(x,y),输出所对应的数字。 解析:规律能看出来,问转载 2010-09-29 21:33:00 · 659 阅读 · 0 评论