zoukankan      html  css  js  c++  java
  • C面试题

    1、sizeof()和strlen()的使用?
    
    答:
    
        1.从功能定义上,strlen函数,用来求字符串的长度,sizeof函数是用来求指定变量或变量类型等所占用内存的
    
    
    
    大小;
    
        2.sizeof是运算符,而strlen是C库函数strlen仅仅能用char*做參数,且以'/0'结尾的;
    
      对于静态数组处理:
    
         char str[20]="0123456789";
    
         strlen(str)=10;   //表示数组中字符串的长度
    
         sizeof(str)=20;   //表示数组变量分配的长度
    
      对于指针处理:
    
         char *str="0123456789";
    
         strlen(str)=10;     //表示字符串的长度
    
         sizeof(str)=4;      //表示指针变量的所占内存大小
    
         sizeof(*str)=1;     //表示'0'这个字符变量的所占内存大小
    
    
    
    2、 struct 和 class的差别?
    
    答:
    
       (1)类中的成员默认是private的,当是能够声明为public,private 和protected,结构中定义的成员默认的都是
    
    
    
    public.
    
       (2)结构中不同意定义成员函数,当是类中能够定义成员函数.
    
       (3)结构不能够存在继承关系,当是类能够存在继承关系.
    
    3、 strcpy(), strcat(), strcmp,strlen(), strchr(), memcpy(), memcmp(), memset()的编写?
    
    
    
    4、 内存的分配方式的分配方式有几种?
    
    答:
    
       (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个执行期间都存在。比如
    
    
    
    全局变量。
    
       (2)在栈上创建。在运行函数时,函数内局部变量的存储单元都能够在栈上创建,函数运行结束时这些存储单元
    
    
    
    自己主动被释放。栈内存分配运算内置于处理器的指令集中,效率非常高,可是分配的内存容量有限。
    
       (3)从堆上分配,亦称动态内存分配。程序在执行的时候用malloc或new申请随意多少的内存,程序猿自己负责在
    
    
    
    何时用free或delete释放内存。动态内存的生存期由我们决定,使用很灵活,但问题也最多。
    
    
    
    5,、解释堆和栈的差别?
    
    答:
    
       (1)栈区(stack):由编译器自己主动分配释放 ,存放函数的參数值,局部变量的值等。其操作方式相似于数据结构中
    
    
    
    的栈。
    
       (2)堆区(heap):一般由程序猿分配释放, 若程序猿不释放,程序结束时可能由OS回收 。注意它与数据结构中的
    
    
    
    堆是两回事,分配方式倒是相似于链表.(主要有:malloc/free,new/delete)
    
    
    
    6,、枚举的使用方法,以及它与宏的差别?
    
    答:
    
        枚举(enum)作用:定义一组常量,并且这些常量组成了一个集合。当我们将emun參数传递给函数时,假设传递了
    
    
    
    一个不属于这个集合的參数,编译器报错。
    
        差别:
    
        枚举是类型,而宏没有类型。
    
        枚举将检查其语法,而宏是简单的文本替换。
    
    
    
    7、 const的使用方法,以及声明const变量与宏的差别?
    
    答:
    
       const的使用方法有四种:
    
       a): const对象和const类型的对象;
    
       b): const指针 和 指向const的指针 及两者结合;
    
       c): const 參数修饰 和 參数返回类型的const修饰;
    
       d): const类成员 和 const 成员函数;
    
       差别:
    
       const常量有数据类型, 而宏常量没有数据类型。编译器能够对前者进行类型安全检查,而对后者仅仅能进行字符
    
    
    
    替换,没有类型
    
       安全检查。并且字符替换可能会带来料想不到的边界效应。
    
       有些集成化工具能够对const常量进行调试, 但不能对宏量进行调试。
    
    
    
    8、函数assert的使用方法?
    
    答:
    
       断言assert是仅在debug版本号起作用的宏,用于检查“不应该“发生的情况。程序猿能够把assert看成一个在任
    
    
    
    何系统状态下都能够安全使用的无害測试手段。
    
    
    
    9、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)?
    
    答:
    
       #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
    
    
    
    10、 写一个"标准"宏MIN,这个宏输入两个參数并返回较小的一个?
    
    答:
    
       #define MIN(A,B) ((A) <= (B) ? (A) : (B)) 
    
    
    
    11、嵌入式系统中常常要用到无限循环,你怎么样用C编写死循环呢?
    
    答:
    
       这个问题用几个解决方式。我首选的方案是:
    
       while(1)
    
       {
    
       }
    
    
    
       一些程序猿更喜欢例如以下方案:
    
       for(;;)
    
       {
    
       }
    
    
    
    12、用变量a给出以下的定义
    
    a) 一个整型数(An integer) 
    
    答:a)     int a; // An integer 
    
    b)一个指向整型数的指针( A pointer to an integer) 
    
    答:b)     int *a; // A pointer to an integer 
    
    c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)
    
    答:c)     int **a; // A pointer to a pointer to an integer 
    
    d)一个有10个整型数的数组( An array of 10 integers) 
    
    答:d)     int a[10]; // An array of 10 integers 
    
    e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers) 
    
    答:e)     int *a[10]; // An array of 10 pointers to integers 
    
    f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers) 
    
    答: f)     int (*a)[10]; // A pointer to an array of 10 integers 
    
    g) 一个指向函数的指针,该函数有一个整型參数并返回一个整型数(A pointer to a function that takes an 
    
    
    
    integer as an argument and returns an integer) 
    
    答:g)    int (*a)(int); // A pointer to a function a that takes an integer argument and returns an 
    
    
    
    integer 
    
    h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型參数并返回一个整型数( An array of ten 
    
    
    
    pointers to functions that take an integer argument and return an integer )
    
    答:h)    int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument 
    
    
    
    and return an integer 
    
    
    
    13、关于内存对齐的问题以及sizof()的输出? 
    
    答:
    
       编译器自己主动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于
    
    
    
    ,为了訪问未对齐的内存,处理器须要作两次内存訪问;然而,对齐的内存訪问仅须要一次訪问。
    
    
    
    14、 static有什么用途?(请至少说明两种)
    
    答:
    
       (1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
    
       (2) 在模块内(但在函数体外),一个被声明为静态的变量能够被模块内所用函数訪问,但不能被模块外其他函数
    
    
    
    訪问。它是一个本地的全局变量。
    
       (3) 在模块内,一个被声明为静态的函数仅仅可被这一模块内的其他函数调用。那就是,这个函数被限制在声明它
    
    
    
    的模块的本地范围内使用。
    
    
    
    15、引用与指针有什么差别?
    
    答:
    
       (1) 引用必须被初始化,指针不必。
    
       (2) 引用初始化以后不能被改变,指针能够改变所指的对象。
    
       (3) 不存在指向空值的引用,可是存在指向空值的指针。
    
    
    
    16、什么是平衡二叉树?
    
    答:
    
       左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。
    
    
    
    17、堆栈溢出通常是由什么原因导致的?
    
    答:
    
       没有回收垃圾资源。
    
    
    
    18、什么是预编译?何时须要预编译?
    
    答:
    
       (1)总是使用不常常修改的大型代码体。 
    
       (2)程序由多个模块组成,全部模块都使用一组标准的包括文件和同样的编译选项。在这样的情况下,能够将全部
    
    
    
    包括文件预编译为一个预编译头。
    
    
    
    19、队列和栈有什么差别?
    
    答: 
    
       队列先进先出;栈后进先出。
    
    
    
    20、数组和链表的差别?
    
    答:
    
       数组:数据顺序存储,固定大小;
    
       链表:数据能够随机存储,大小可动态改变;
    
    
    
    21、为什么数组名作为參数,会改变数组的内容,而其他类型如int却不会改变变量的值?
    
    答:
    
       当数组名作为參数时,传递的实际上是地址。而其它类型如int作为參数时,因为函数參数值实质上是实參的一
    
    
    
    份拷贝,被调函数内部对形參的改变并不影响实參的值。
    
    
    
    22、数据结构和算法: 
    
    A:查找:
    
    (1)二分法查找;
    
    (2)
    
    (3)
    
    (4)
    
    B:写出下列算法的时间复杂度和实现排序:
    
    (1)冒泡排序; 
    
    (2)选择排序; 
    
    (3)插入排序; 
    
    (4)高速排序; 
    
    (5)堆排序; 
    
    (6)归并排序;
    
    
    
    23、编写gbk_strlen函数,计算含有汉字的字符串的长度,汉字作为一个字符处理;已知:汉字编码为双字节,当中
    
    
    
    首字节<0,尾字节在0~63以外;(假设一个字节是-128~127)?
    
    
    
    
  • 相关阅读:
    Python 安装Twisted 提示python version 2.7 required,which was not found in the registry
    Openfire Strophe开发中文乱码问题
    css div 垂直居中
    How to create custom methods for use in spring security expression language annotations
    How to check “hasRole” in Java Code with Spring Security?
    Android 显示/隐藏 应用图标
    Android 当媒体变更后,通知其他应用重新扫描
    文件上传那些事儿
    专题:点滴Javascript
    主流动画实现方式总结
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4355176.html
Copyright © 2011-2022 走看看