华三(H3C)实习生面试题

介绍几个H3C 2013年实习生的面试题

1,宏和内联函数的区别

宏定义:
宏是在预处理阶段进行的简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换)。而且对参数不进行任何检查的验证检查。宏的参数是不占内存空间的,因为只是做字符串的替换。
内联函数:
所谓"内联函数"就是将很简单的函数"内嵌"到调用他的程序代码中,目的旨在节约下原本函数调用时的时空开销。但必须注意的是,作为内联函数,函数体必须十分简单,不能含有循环、条件、选择等复杂的结构,否则就不能做为内联函数了。事实上,即便你没有指定函数为内联函数,有的编译系统也会自动将很简单的函数作为内联函数处理;而对于复杂的函数,即便你指定他为内联函数,系统也不会理会的。

2,堆和栈的区别

这个问题我在前面的一篇博文中已经进行了详细的介绍。请看C中进程的内存分配

3,C++中using namespace std 的作用

对于一个存在着标准输入输出的C++控制台程序,一般会在#include <iostream>的下一行发现一句话,using namespace std。这句话其实就表示了所有的标准库函数都在标准命名空间std中进行了定义。其作用就在于避免发生重命名的问题。
关于using namespace *
顾名思义,using namespace * 就表示释放命名空间* 中间的东西。好处在于我们在程序里面就不用在每个函数的头上都加上*::来调用。如果我们不加上using namespace std,那么我们就需要在主函数中的标准输出流cout函数前面加上std,写成std::cout.表示调用std空间里面的标准输出流cout。

4,解释说明main函数参数

int main(int argc, char *argv[])
这两个参数的作用:argc 是指命令行输入参数的个数(以空白符分隔),argv存储了所有的命令行参数 假如你的程序是hello.exe,如果在命令行运行该程序,运行命令为:hello.exe USTC SZ
那么,argc的值是 3,argv[0]是"hello.exe",argv[1]是"USTC",argv[2]是"SZ"。下面的程序演示argc和argv的使用:

#include <stdio.h>

int main(int argc, char ** argv)
{
    int i;
    for (i=0; i < argc; i++)
        printf("Argument %d is %s.\n", i, argv[i]);

    return 0;
}
假如上述代码编译为hello.exe,那么运行
hello.exe a b c d e
将得到
Argument 0 is hello.exe.
Argument 1 is a.
Argument 2 is b.
Argument 3 is c.
Argument 4 is d.
Argument 5 is e.
运行
hello.exe lena.jpg
将得到
Argument 0 is hello.exe.
Argument 1 is lena.jpg.

5,进程和线程的区别

这个问题请看我的前面的一篇文章进程与线程的一个简单解释

6,单链表的逆置

ListNode* ReverseList(ListNode* pHead)
{
    ListNode* pReversedHead = NULL;
    ListNode* pNode = pHead;
    ListNode* pPrev = NULL;
    while(pNode != NULL)
    {
        ListNode* pNext = pNode->m_pNext;

        if(pNext == NULL)
            pReversedHead = pNode;

        pNode->m_pNext = pPrev;

        pPrev = pNode;
        pNode = pNext;
    }

    return pReversedHead;
}


你可能感兴趣的:(华三(H3C)实习生面试题)