一份C/C++实习生笔试试卷(基础部分 )

1、 下面几个是在编程领域里经常使用的缩写,请写出他们的英文全写,并翻译成中文。注意是编程领域.
(1) OS  (operating system操作系统)
(2) VS  (virsual studio可视化工作室)
(3) MS (microsoft微软)
(4) CS (c sharp 锋利的C)
(5) RTOS (run-time operating system实时操作系统)
(6) SDK (Software development kit软件开发包)
(7) IDE (Integrated development environment集成开发环境)
2、 下列几个C语言表达式是否正确?如果正确,写出它们表达的意思:
(1) a&b (a,b整形之类的就正确,按位与)
(2) a&(&b) (...写这种代码打80大板,扣发当月绩效50%)
(3) a&&b (a、b是布尔值那么就是正确的,就是看两者是否都为真)
(4) a**b (b是指针的话可能正确,不过写这种代码打80大板,扣发当月绩效50%)
3、 在编程风格中,一般都要强调使用匈牙利命名法,下面是匈牙利命名法中一些公认的前缀,并给出变量名的例子,请写出它们所代表的变量类型:
前缀 变量名 描述前缀的意义
g_ g_Lock (全局)
m_ m_Num (成员)
p pTrack (指针)
h hModule (句柄)
sz szText (以0结尾的字符串)
dw dwMsg (DWORD,32位机上是32位整形)

4、头文件中ifndef / define / endif 是做什么用的? (防止重复包含)
5、代码里有时可以看到extern “C”, 这语句是做什么用的? (作用很多,按C编译、引用外部二进制文件。。。)
6、软件开发中说的check out, check in是什么意思?(代码的签入签出,团队开发的时候向数据库签入签出代码保证代码同步,管理好项目软件的版本,进度等等)
7、C语言函数前面加static,和C++类的成员函数前面加static,两者的意义有何区别? (可能是我C语言没学好,C语言函数前面加static视乎是不对的,C++成员前加static指成员函数参数没有this指针)
8、简单描述一下WIN32上 .c / .cpp / .rc / .obj / .res / .lib / .dll / .exe这几个后缀所表示的文件类型,以及他们之间的相互生成关系。如果你是LINUX程序员,前面这个问题答不上,那么请描述一下GCC编译的几个步骤和中间生成文件。
(.c C语言文件,.cpp C++文件, .rc 资源文件, .obj obj文件,即一种二进制文件,可以被windows读取并执行的文件, .res 资源文件 .lib 库文件,即一种函数索引文件,连接器连接的时候读取lib文件并找到调用函数所在位置, .dll 动态链接库文件,包含代码属性、代码的文件,可以和其他执行文件、dll文件连接成完整代码, .exe可执行文件)
二、简单代码
1、
char* GetMemory(void)
{
    char p[] = “Welcome to AMOI”;
    return p;
}
void main(void)
{
    char* str = NULL;
    str = GetMemory();
    printf(str);
}
运行main函数的结果如何?你觉得该段代码是否存在什么问题?

2、
void GetMemory(char** p, int len)
{
    *p = (char*)malloc(len);
}
void main(void)
{
    char* str;
    GetMemory(&str, 100);
    strcpy(str, “Hello World”);
    printf(str);
}
运行main函数的结果如何?你觉得该段代码是否存在什么问题?

 
******************************************

1回答
可能是乱码。
因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
2回答
(1)能够输出Hello World
(2)内存泄漏
******************************************

我也来说说,对以第一个程序:是错误的
原因在于:
char* GetMemory(void)
{
    char p[] = “Welcome to AMOI”;
    return p;
}
这里使用的p是一个局部变量,程序完成后就将回收其存在栈中的空间,所以返回引用不能使用
改进:
char* GetMemory(char *ptr)
{
    ptr = "Welcome to AMOI";
    return ptr;
}

对于第二个程序,也有一些问题,
void GetMemory(char** p, int len)
{
    *p = (char*)malloc(len);
}
这里,我们使用了堆来分配空间,但是分配率空间后,我们没有主动地将分配的空间清空
同时对于传入的空间的检测也没有到位(这些前面的兄弟都说过了)
改进:
void GetMemory(char** p, int len)
{
    if (len <= 0) {
        printf("说明性的语句");
        *p = NULL;
    }

    *p = (char *)malloc(len*sizeof(类型))
    if (*p == NULL) {
        printf("说明性语句");
        exit(1);
    }
}
然后是主程序中最后添加
free(str); 

你可能感兴趣的:(C语言)