c/c++每日十题10.17

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<<getmax;时会转换为cout<< a>b?a:b; 这样做节省了调用函数的内存消耗但是编译器也可能不采用内联,决定权在编译器手里。
对于A的话,若是虚函数之前加上inline关键字,并不会成为内联函数,程序仍然是动态编译的。而且如果内联函数定义在调用函数的后面,则编译器会将其当作普通函数调用来看,并不会直接插入到调用处。

栈区:new malloc
全局区:static+全局变量

c++不是类型安全的变量 指针和引用很容易引起分配内存错误。

10.下面for语句执行时的循环次数为()。

int i, j;
for ( i=0, j=5;i=j; )
{ cout<<i<<j<< ndl; i++; j--; }

5次

解析:循环条件时i=j;不是i==j;当j=0时跳出循环。

猜你喜欢

转载自blog.csdn.net/qq_41002048/article/details/83111103