牛客网练习题整理(3)

1 关于指针的const 用法

class A{};
void f(const A** p) {}               / /在vs 2017上没有任何形式的参数传进来
void g(const A*const *p) {}
void k(const A*&p) {
    printf("%p\n", p);
}
int main()
{
    const A* ca = new A();
    printf("%p\n", ca);
    A* a = new A();
    A** p = &a;
    k(ca);
    f(p);  //这个应用法错误        int** 装换为 const int** 是有错误的
    g(p);

    return 0;
}

const A**p  const A*const *p const A*const * const p  const A**const P

2 关于STL的一些说法

STL容器是线程安全的
当容量不够时,vector内部内存扩展方式是翻倍
std::sort是不稳定排序
std::bitset不是一个STL容器
std::stack默认是用deque实现的
std::string中可以存储多个’\0’字符

3若 a 是 float 型变量,b 是 unsigned 型变量,以下输入语句中合法的是()。

正确答案: C   你的答案: B

scanf("%6.2f%d",&a,&b);
scanf("%f%n",&a,&b);
scanf("%f%3o",&a,&b);   //%o  输出无符号数(8进制)
scanf("%f%f",&a,&b);

%n说明符输出有效字符数量,%n在scanf和printf中都可使用。与%n相对应的形参是一个int类型的指针,%n不影响scanf和printf的返回值。例如:
scanf("%d %d%n", &i, &j, &k);
如果输入434 6434,则k等于8,而scanf的返回值仍然为2。又如:
scanf("%c%n", &ch, &k);
输入“sbcdefdg”后,k等于1,而不是8,因为%c只取一个字符,%n输出的是有效字符数量。

printf的返回值就是输出了多少个字符,所以%n一般没什么作用
一般用来检索scanf输入了多少个字符 包括空格 Tab

 

3 Initialize integer i as 0, what's the value of i after the following operation?i += i > 0 ? i++ : i--;

i+=i--;

i= -1+0;

4 以下程序的运行结果是()

int main(void)

{

printf("%s , %5.3s\n","computer","computer");

return 0;

}

computer , com
%m.ns 输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。

 

5.以下关于抽象类的说法正确的有

抽象类只能用作其他类的基类
不能使用抽象类定义对象
抽象类不能用作参数类型、函数返回类型或显式转换的类型(漏选了)

6.浅 COPY的问题

class A{

   int i;

};

class B{

   A *p;

public:

   B(){p=new A;}

   ~B(){delete p;}

};

void sayHello(B b){

        //A*  p 释放一次

}

int main(){

   B b;

   sayHello(b); 

           //A*  p 释放第二次

}

重复释放  vs出现异常。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值