zoukankan      html  css  js  c++  java
  • 某公司2014校园招聘笔试题C++

    算是复习一下C++的东西。

    1. What is the output of the program below in a Win32 platform? (10 points)

    void size_func(char a[])
    {
        printf("%d\n", sizeof(a));
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        char str[] = "WelcomeToBJ";
        char *p = str;
        void *m = malloc(100);
        int n = 10;
        
        printf("%d\n", sizeof(str));
        printf("%d\n", sizeof(p));
        printf("%d\n", sizeof(n));
        printf("%d\n", sizeof(m));
        size_func(str);
        
        return 0;
    }

    The output is:

    12

    4

    4

    4

    4

    2. What are the outputs of Test() functions? Explain the reason for your answer. (10 points)

    1.

    void GetMemory(char *p)
    {
        p = (char *)malloc(100);
    }
    
    void Test(void)
    {
        char *str = NULL;
        GetMemory(str);
        strcpy(str, "Hello Beijing");
        printf(str);
    }

    2.

    char *GetMemory(void)
    {
        char p[] = "Hello Beijing";
        return p;
    }
    
    void Test(void)
    {
        char *str = NULL;
        str = GetMemory();
        printf(str);
    }

    3.

    void GetMemory3(char **p, int num)
    {
        *p = (char *) malloc(num);
    }
    
    void Test3()
    {
    
        char *str = NULL;
        GetMemory3(&str, 100);
        strcpy(str, "Hello Beijing");
        printf(str);
    }

    4.

    void Test4()
    {
        char *str = (char *)malloc(100);
        strcpy(str, "Hello");
        free(str);
        if(str != NULL)
        {
            strcpy(str, "Beijing");
            printf(str);
        }
    }

    Answer:1.显然不对,GetMemory函数传参的时候只是将str的值(也就是一个地址)赋给了p,在函数里给p赋值不影响外面的str值,所以在strcpy()的时候会出错。

    2. 函数中的p指向的字符串应为local variable,随着函数调用结束而释放。

    (如果不是定义的字符串“char p[] = "Hello Beijing";”, 而是定义的字符指针 char *p,那么可以正常执行。

    因为初始化的字符串数组存储在栈中,可以改变其值。初始化的字符串常量指针存储在静态常量区,不能修改其值。)

    3. 可以正常输出"Hello Beijing"

    4. 输出为:"Beijing",在内存被free之后str并不等于NULL,但是str也是野指针,并不安全,可能会覆盖其他数据,所以一般会将指针free后直接将指针赋为空。

    3. What is the output of the program below? (10 points)

    class IGT
    {
    public:
        void x()    {cout << "class IGT, function x"<< endl;}
        virtual void y()    {cout << "class IGT, function y" << endl;}
    };
    
    class ADV : public IGT
    {
    public:
        virtual void x()    { cout << "class ADV, function x" << endl;}
        void y()    { cout << "class ADV, function y" << endl;}
    };
    
    class CTA : public ADV
    {
    public:
        void x()    {cout << "class CTA, function x" << endl;}
        void y()    {cout << "class CTA, function y" << endl;}
    };
    
    int tmain2()
    {
        IGT* igt1 = new ADV;
        IGT* igt2 = new CTA;
        ADV* adv = new CTA;
    
        igt1->x();
        igt1->y();
        igt2->x();
        igt2->y();
        adv->x();
        adv->y();
        
        delete igt1;
        igt1 = NULL;
    
        delete igt2;
        igt2 = NULL;
    
        delete adv;
        adv = NULL;
    
        return 0;
    }

    The output :

    class IGT, function x
    class ADV, function y
    class IGT, function x
    class CTA, function y
    class CTA, function x
    class CTA, function y

  • 相关阅读:
    在Spring中使用cache(EhCache的对象缓存和页面缓存)
    halcon 模板匹配 -- 转化 vector_angle_to_rigid
    halcon 模板匹配 -- find_shape_model
    halcon 模板匹配 -- create_shape_model
    C#快速获取指定网页源码的几种方式,并通过字符串截取函数 或 正则 取指定内容(IP)
    C# Socket通讯 本机多网卡,指定网卡通讯
    C# 获取所有网卡信息
    C#关闭退出线程的几种方法
    C#多线程方法 可传参
    C# Datetime 使用详解
  • 原文地址:https://www.cnblogs.com/zijin/p/3376471.html
Copyright © 2011-2022 走看看