1.假定MyClass为一个类,则该类的拷贝构造函数的声明语句是
A.MyClass(MyClass x)
B.MyClass &(MyClass x)
C.MyClass(MyClass &x)
D.MyClass(MyClass *x)
答案:选C
拷贝构造函数的形参不限制为const,但是必须是一个引用,以传地址方式传递参数,否则导致拷贝构造函数无穷的递归下去,指针也不行,本质还是传值。
2.
|
请问刚进入func函数时,参数在栈中的形式可能为 (左侧为地址,右侧为数据—)
正确答案: D 你的答案: D (正确)
A.
0x0013FCF0 0x61616161 0x0013FCF4 0x22222222 0x0013FCF8 0x00000000
B.
0x0013FCF0 0x22222222 0x0013FCF4 0x0013FCF8 0x0013FCF8 0x61616161
C.
0x0013FCF0 0x22222222 0x0013FCF4 0x61616161 0x0013FCF8 0x00000000
D.
0x0013FCF0 0x0013FCF8 0x0013FCF4 0x22222222 0x0013FCF8 0x61616161
需要注意两点:
第一是函数参数的入栈顺序,从右到左;
第二是栈的存储是从高地址到低地址。
3.以下代码的输出结果是?
void main() { char str[]="S\065AB"; printf("\n%d", sizeof(str)); }
正确答案: C 你的答案: A (错误)
A.7
B.6
C.5
D.error
转义字符\ddd表示8进制, 是一个数 ,所以就有 4个字符 + '\0' 即5
4.
下面程序会输出什么:
static int a=1; void fun1(void) { a=2; } void fun2(void) { int a=3; } void fun3(void) { static int a=4; } int main() { printf(“%d”,a); fun1( ); printf(“%d”,a); fun2( ); printf(“%d”,a); fun3( ) printf(“%d”,a); }
正确答案: B 你的答案: A (错误)
A.1 2 3 4
B.1 2 2 2
C.1 2 2 4
D.1 1 1 4
第一个printf打印静态全局变量a的值,为1。
fun1()对全局变量a重新赋值为2,因此第二个打印为2。
fun2()在函数内部重新声明了一个变量a,然后对该变量a赋值,该函数的作用域是本函数,并不影响全局变量a,因此第三个printf仍然为2。
fun3()在函数内部声明了一个静态变量a,并将其赋值为4,虽然该变量在函数执行结束后并不回收,但是其作用域仅限于本函数内部,printf同样不时,仍然是外部的全局变量a的值。
5.
在说明语句int *f( );中,标识符f代表的是()。
正确答案: D 你的答案: C (错误)
A.一个用于指向整型数据的指针变量
B.一个用于指向一维数组的行指针
C.一个用于指向函数的指针变量
D.一个返回值为指针型的函数名
f右侧(),f是一个函数,f左侧*,f()函数返回类型为指针,最左侧为int ,则指针指向整形变量。
6.
已有如下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array
的正确定义方式为()。
int a[3][4];
f (a);
正确答案: C 你的答案: D (错误)
A.f(int array[ ][6])
B.f(int array[3][ ])
C.f(int array[ ][4])
D.f(int array[2[5])
解释】当用二维数组作为形参时,第一维的大小可以省略,但第二维的大小是不能
省略的,必须和实参数组第二维的大小一致。所以正确答案是C。