1.若变量a是int类型,并执行了语句a=’A’+1.6;则正确的叙述是?
A.a的值是字符C
B.a的值是浮点型
C.不允许字符型和浮点型相加
D.a的值是字符’A’的ASCⅡ值加上1
答案:D
a的值还是int类型,允许字符型和浮点型相加,最后的结果就是a的值是字符’A’的ASCⅡ值加上1
2.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑变量生命周期问题,这句话对吗?
答案:错
其中静态局部变量的生存周期虽然为整个源程序,但是其作用域仍然与局部变量相同,当退出该函数时,该变量还继续存在,但是不能使用它
3.动态全局变量、静态全局变量、静态局部变量的生命周期都是程序运行期间
4.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度,这句话对吗?
答案:错
如果全局变量仅仅由单个函数访问,不存在耦合度的问题
5.以下(1)(2)中变量b,c类型为?
int i=0; const int ci=i; auto b=ci; //(1) int *p=&i; decltype(*p) c=i;//(2)
答案:int,int&
decltype和auto都可以用来推断类型,但是二者有几处明显的差异
1.auto忽略顶层const,decltype保留顶层const
2.对引用操作,auto推断出原有类型,decltype推断出引用
3.对解引用操作,auto推断出原有类型,decltype推断出引用
4.auto推断时会实际执行,decltype不会执行,只做分析。总之在使用中过程中和const、引用和指针结合时需要特别小心
6.下面代码正确吗?
char a[10],*p; p=a="china";
答案:错误
数组名是一个常量指针,相当于char * const a;不能改变它的指向
7.假设Aclass为抽象类,下列正确的语句是?
A.Aclass fun( int );
B.Aclass *p;
C.int fun( Aclass );
D.Aclass Obj;
答案:B
抽象类的规定:
①抽象类只能用作其他类的基类,不能建立抽象类对象,即抽象类不能被实例化,但是可以存在抽象类指针指向子类//D错误
②抽象类不能用作参数类型、函数返回类型或显式转换的类型// A、C错误
③可以定义指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性// B正确
8.当顺利执行了文件关闭操作时,fclose函数的返回值是0,否则,返回值为非0
9.设有以下函数 int f(int a, char * b) {„„}
则下面对函数指针的定义和赋值错误的是?
A.int ( * p)(int, char * ); p=f;
B.int * p(); p=f;
C.int ( * )p(); p=&f;
D.int * p(int, char);p=&f;
答案:BCD
函数是有地址的,但是写不写&都可以
函数指针的格式为:函数类型( * 指针变量名)(形参列表)
A:p是一个函数指针,f是一个函数,p = f相当于p = &f;正确
B:p是一个函数名,错误
C:编译不通过,格式为:函数类型(*指针变量名)(形参列表)
D:p是一个函数名,错误