1.下列存储标识符中,( )的可见性与存在性不一致
正确答案: C 你的答案: A (错误)
A外部类
B自动类
C内部静态类
D寄存器类
解析:
可见性:在什么地方可见,能调用的地方就是可见的。
存在性:在什么地方初始化,使用完在什么地方释放,存在性一般是在运行的生命周期内。
除了static 其他的都在函数结束就释放了。
一个 C 程序( .exe )由若干个 C 文件( .C )组成,一个( .C )文件由若干个 C 函数组成。函数内、外均可(根据需要)定义或声明变量。
变量问题:
按作用域划分:内部变量(局部变量),外部变量(全局变量)
内部变量:在函数内定义的变量
外部变量:在函数外定义的变量
区别在于变量定义的位置
按存储类型划分:auto、static/register(动态、静态/寄存器)
auto:动态,当存储类型缺省时系统默认为auto,处于动态区,程序运行时动态分配,程序每次调用时会重新赋值,不赋初值时其值不确定。
static:静态,位于静态区,程序调用时不进行赋值,使用上一次变量调用后留下的值。static用于全局变量时,说明这个变量时本 .C文件的静态储存变量,其他文件不可调用(即使有extern声明的函数也不可调用),用于局部变量时,说明此变量为本函数私有,其他函数不可调用。static用于函数时,声明此函数为本 .C文件私有,其他文件不可调用。
存储声明 | 定义位置 | 性质 | 生命周期 | 存储位置 | 可见性 | 可见性与存在性一致? |
---|---|---|---|---|---|---|
未声明存储类型 | 函数外部(全局) | static变量性质 | 从.exe开始到结束 | 静态区 | .exe全局可见 | 是 |
static | 函数外部 | static性质 | 从.exe开始到结束 | 静态区 | 本文件可见 | 否 |
static | 函数内部 | static性质 | 从.exe开始到结束 | 静态区 | 本函数可见 | 否 |
auto | 函数内部 | auto性质 | 函数调用开始到结束 | 动态区 | 本函数可见 | 是 |
auto | 函数形参表内 | auto性质 | 函数调用开始到结束 | 动态区 | 本函数可见 | 是 |
2.派生类只继承基类中的公有成员和保护成员,而不继承私有成员.说法是否正确?
错误
解析:
派生类会继承基类的私有成员,但无法直接调用,基类private成员对于派生类还是不可见的,需使用友元函数才可以访问。
3.以下程序的输出结果是()。
main()
{ char s[]="123",*p;
p=s;
printf("%c%c%c\n",*p++,*p++,*p++);
}
321
解析:
要点在于printf从右向左压栈,输出倒序123即321。(与编译器有关)
4.在 C 语言程序中,若对函数类型未加显式说明,则函数的隐含类型为()
int
5.int a[5] = {1,3,5,7,9}; int *p = (int *)(&a+1); printf(“%d,%d”,*(a+1),*(p-1));
运行结果?
3,9
解析:
*(a+1)即a[1]=3; &a+1的意思并不是a[1],而是从a[0]向右偏移整个a数组的大小,也就是右移5个int的长度,即a[5],
所以p指向的是a[5]的地址,p-1也就是a[4]的地址,所以第二个数输出的是a[4]。
6.若用数组名作为函数调用的实参,传递给形参的是( )。
正确答案: A 你的答案: A (正确)
A数组的首地址
B数组中第一个元素的值
C数组全部元素的值
D数组元素的个数
7.关于delete运算符的下列描述中,( )是错误的。
正确答案: C 你的答案: C (正确)
A它必须用于new返回的指针
B使用它删除对象时要调用析构函数
C对一个指针可以使用多次该运算符
D指针名前只有一对方括号符号,不管所删除数组的维数
new delete必须匹配使用,否则会出现内存泄露的问题,对于一个指针,可以通过delete[]来释放
8.假设A为抽象类,下列声明( )是正确的。D
A int fun(A);
B A Obj;
C A fun(int);
D A *p;
纯虚函数:virtual void function()=0;
含有纯虚函数的类称为抽象类。
抽象类的性质:
1.抽象类只能作为其他类的基类,不能定义对象。
2.不能初始化,不能当作返回值,不能当作参数,但是可以作为指针变量,该指针或引用可指向派生类,以实现多态。
3.要求派生类必须覆盖基类的纯虚函数。
9.在C++语言中,下列说法正确的是:
正确答案: D 你的答案: A (错误)
A inline函数表示编译器一定会将函数体直接插入到调用此函数的地方,这样可以加快程序的运行速度
B 局部变量和全局变量不能重名
C 静态局部变量内存是在运行期分配的,存储在堆栈区
D C++不是类型安全的语言
解析:
内联函数:比如有个比较大小的函数getmax(a,b){return a>b?a:b;}如果把这个函数设置为内联函数,则编译器在编译主函数cout<
对于A的话,若是虚函数之前加上inline关键字,并不会成为内联函数,程序仍然是动态编译的。而且如果内联函数定义在调用函数的后面,则编译器会将其当作普通函数调用来看,并不会直接插入到调用处。
栈区:new malloc
全局区:static+全局变量
c++不是类型安全的变量 指针和引用很容易引起分配内存错误。
10.下面for语句执行时的循环次数为()。
int i, j;
for ( i=0, j=5;i=j; )
{ cout<
5次
解析:循环条件时i=j;不是i==j;当j=0时跳出循环。