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出现异常。