zoukankan      html  css  js  c++  java
  • C++备忘(更新中...)

    1、引用与指针有什么区别?

    1) 引用必须被初始化,指针不必。

    2) 引用初始化以后不能被改变,指针可以改变所指的对象。

    3) 不存在指向空值的引用,但是存在指向空值的指针。

    2、什么是平衡二叉树?

    左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1

    3、堆栈溢出一般是由什么原因导致的?

    没有回收垃圾资源

    4、给两个变量,如何找出一个带环单链表中是什么地方出现环的?

    一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方

    5、如何引用一个已经定义过的全局变量?

    可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

    6、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

    可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

    7、对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?

    c用宏定义,c++用inline

    8、写一个“标准”宏,这个宏输入两个参数并返回较小的一个。

    #define  Min(X, Y)   ((X)>(Y)?(Y):(X))

    9、交换两个变量的值,不使用第三个变量。

    有两种解法, 一种用算术算法, 一种用^(异或)

    a = a +b;

    b = a -b;

    a = a -b;

    or

    a =a^b;// 只能对int,char..

    b = a^b;

    a = a^b;

    or

    a ^= b^= a;

    10、c和c++中的struct有什么不同?

    c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。

    c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private

    11、什么是预编译,何时需要预编译:

      1)总是使用不经常改动的大型代码体。

      2)程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

    12、数组地址、指针问题

    char str1[] ="abc";

    char str2[] ="abc";

    const char str3[]= "abc";

    const char str4[]= "abc";

    const char *str5 ="abc";

    const char *str6 ="abc";

    char *str7 ="abc";

    char *str8 ="abc";

    cout << (str1 == str2 ) << endl;

    cout << (str3 == str4 ) << endl;

    cout << (str5 == str6 ) << endl;

    cout << (str7 == str8 ) << endl;

    结果是:0 0 1 1

    解答:str1,str2,str3,str4是数组变量,它们有各自的内存空间;

    而str5,str6,str7,str8是指针,它们指向相同的常量区域。

    13、C++ 用宏定义写出swap(x,y)交换函数

       //C++ 用宏定义写出swap(x,y)交换函数,多行语句可用'\'连接

       #define swap(x, y)\

       x = x + y;\

       y = x - y;\

       x = x - y; 


    14.地址偏移

      main()

      {

        int a[5]={1,2,3,4,5};

        int *ptr=(int *)(&a+1);

        printf("%d,%d",*(a+1),*(ptr-1));

      }

    输出:2,5

    *(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5

    &a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)

    int *ptr=(int*)(&a+1);

    则ptr实际是&(a[5]),也就是a+5

    原因如下:

    &a是数组指针,其类型为 int (*)[5],而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。

    a是长度为5的int数组指针,所以要加 5*sizeof(int),即ptr实际是a[5]

    但是prt与(&a+1)类型是不一样的(这点很重要)

    所以prt-1只会减去sizeof(int*)

    a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数

    组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].

    15.如果只想让程序有一个实例运行,不能运行两个。

      把这两行代码插入程序初始位置即可(需要包含:<stdlib.h> & <windows.h> ) :

      CreateMutex(NULL,FALSE,"YourAppName");

      if(GetLastError() == ERROR_ALREADY_EXISTS)

      {

        exit(0);

      }

    16.定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句

      #define MAX(a,b)   ( abs((a)-(b)) == ((a)-(b))?(a):(b) )

    17.x=x+1,x+=1,x++哪个效率最高?为什么?

    x=x+1 效率最低

    1)读取右x地址

    2)x+1

    3)读取左x地址

    4)将右值传给左x 

    x+=1 其次

    1)读取右x地址

    2)x+1

    3)将得到的值传给x(x的地址已经读出,故不用读取) 

    x++ 效率最高

    1)读取右x地址

    2)x自增1

    故x++效率最高。

    18.打印出当前源文件的文件名以及源文件的当前行号

    #include<stdio.h>

    void main()
    {
       printf("当前源文件名:%s",__FILE__);
       printf("源文件当前行号:%ld",__LINE__);
    }

    19.main主函数执行完毕后再执行一段代码

    /* ATEXIT.C: This program pushes four functions onto
     * the stack of functions to be executed when atexit
     * is called. When the program exits, these programs
     * are executed on a "last in, first out" basis.
     */

    #include <stdlib.h>
    #include <stdio.h>

    void fn1( void ), fn2( void ), fn3( void ), fn4( void );

    void main( void )
    {
       atexit( fn1 );
       atexit( fn2 );
       atexit( fn3 );
       atexit( fn4 );
       printf( "This is executed first. " );
    }

    void fn1()
    {
       printf( "next. " );
    }

    void fn2()
    {
       printf( "executed " );
    }

    void fn3()
    {
       printf( "is " );
    }

    void fn4()
    {
       printf( "This " );
    }

    /*
    Output

    This is executed first.
    This is executed next.*/

    递归和分治策略:http://www.cnblogs.com/chinazhangjie/archive/2010/10/07/1845034.html

    重载、重写、覆盖:http://www.cnblogs.com/cuboo/articles/1564607.html

  • 相关阅读:
    Python练习题
    python自动化学习笔记(六)
    Python自动化学习笔记( 五)
    自动化学习笔记之接口测试(一)
    python自动化学习笔记(四)
    vim编辑器命令
    linux之shell通配符
    Python自动化学习笔记(二)
    python自动化学习笔记(三)
    python学习笔记之常用操作符
  • 原文地址:https://www.cnblogs.com/pure/p/1822459.html
Copyright © 2011-2022 走看看