SuperPolo的C++笔试题.docVIP

  • 0
  • 0
  • 约2.27千字
  • 约 4页
  • 2017-06-06 发布于河南
  • 举报
SuperPolo的C笔试题

一.C/C++语言题 有如下一段代码,可以编译通过吗?如果不能,应该怎么修改。 class Foo{ Bar b; }; class Bar{ Foo a; }; 解答: 不能通过编译,因为类Foo的成员b依赖于类Bar,而类Bar中的成员a依赖于类Foo。这样两个类的对象都不能实现。 有如下一段代码编译不过去,如何修改: test1.h: #ifndef TEST1H #define TEST1H char g_str[] = 123456; void fun1(); #endif test1.cpp: #include test1.h void fun1() { cout g_str endl; } test2.cpp: #include test1.h void fun2() { cout g_str endl; } 解答:这段代码编译不能通过,因为在test1.h在开始就已经定义,那么头文件卫士那部分代码就不会执行,也就没有char g_str[]=”123456”的定义,但是test1.cpp和test2.cpp都含有对于g_str的使用,所以编译不能过。修改:直接把开对于g_str的声明和定义写在头文件卫视前边或者后边即可。 有如下一段代码,请给出输出值 test1.h: #ifndef TEST1H #define TEST1H static char g_str[] = 123456; void fun1(); #endif test1.cpp: #include test1.h void fun1() { g_str[0] ++; } test2.cpp: #include test1.h void fun2() { cout g_str endl; } main.cpp: #include “test1.h” void fun2(); int main() { fun1(); // a23456 fun2(); // 123456 } 解答:123456 简述一下c++标准库(stl)的内容。 解答:STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。STL现在是C++的一部分,因此不用额外安装什么。 说明一下如下两行代码的区别。 const char *c1 = abc; const char c1[] = abc; 解答: const char *c1 = abc;存储在静态存储区,不能通过指针改变”abc”的值 const char c1[] = abc;存储在栈区,可以通过下标来改变“abc”的值 请给出echo $? 的值和最后Java变量和C变量的值。 extern short Java = 255; int main() { auto volatile short C = Java + 1; { ::Java = C++; if(Java C); C = Java + 1; } return Java = C; } 解答:echo $?输出的是上一次命令执行的结果,输出的是非0 Java------255 C------随机数字 请说明指针和引用的用处和异同。 解答:指针和引用都可以用作函数的参数,函数的返回值类型等。虽然在很多情况下引用作为函数的返回值,在很多情况下能被指针替代,但是遇到构造函数和操作符重载等问题是不能被替代的。 两者的异同的部分:1.指针在声明的时候可以不用初始化,但是引用的声明的时候是必须进行初始化。引用初始化后不能改变,但是指针在不是常指针的情况下是可以被修改的。 指针可以指向空指针,但是引用不存在指向空的引用。 引用在初始化之后不分配内存空间,但是指针在初始化的时候就会分配内存空间。 二.程序题 请给出你对C库函数char* trimright(char * str)的实现。(这个函数的功能是去除字符串右边的空格字符‘ ‘,例如字符串”space space ”,去除后的结果是 ”space space”)。(提示:实现基本版本后,可以考虑是否有更优化的算法) 解答: char * trimright(char* str) { char* a=str; for (str=str+(strlen(str)-1);str==||(*str== );str--); *++str=\0; str = a; return str; } 从1~100中随机抽走一

文档评论(0)

1亿VIP精品文档

相关文档