c/c++错题本

1.假定MyClass为一个类,则该类的拷贝构造函数的声明语句是

A.MyClass(MyClass x)
B.MyClass &(MyClass x)
C.MyClass(MyClass &x)
D.MyClass(MyClass *x)

答案:选C

拷贝构造函数的形参不限制为const,但是必须是一个引用,以传地址方式传递参数,否则导致拷贝构造函数无穷的递归下去,指针也不行,本质还是传值。

 

2.

int i=0x22222222; 

char szTest[]=”aaaa”;  //a的ascii码为0x61 

func(I, szTest);    //函数原型为void func(int a,char *sz); 

请问刚进入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。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值