1,字符串”Hello”会被输出几次?
int main() {
printf("Hello");
fork();
printf("Hello");
}
这个题目,若不注意,会以为输出三个Hello。但是实际上输出四个。但是:
print输出字符串如果不是一”\n”为结尾的话,就不会马上输出,而是保存在缓存区中。fork函数在创建子进程的时候会复制缓存区的数据。
2,++i 和 i++作为参数传入函数的情况分析
函数func的定义如下:
void func(const int& v1, cont int& v2)
{
std::cout << v1 << ' ';
std::cout << v2 << ' ';
}
在Visual Studio开发环境下, 以下代码输出结果为__。
int main (int argc, char* argv[])
{
int i=0;
func(++i,i++);
return 0;
}
在底层实现上,前缀式返回的是对象的引用,而后缀式返回的是对象的值。同时参数传递顺序是从右往左。
i++,首先将0压栈。此时i的值变为1。然后执行++i。此时i变为2,传入函数。所以输出为2 ,0
3,构造函数中,成员变量一定要通过初始化列表来初始化的是:引用成员数据,以及const修饰的类成员。
4,栈和堆的区别:
A,对于栈来说,是由编辑器自动管理,无需手动控制;对于堆来说,释放工作有程序员控制
B,对于栈,生长方向向上;对于堆生长方向向下。
C,
相关知识:
程序内存分区:
1,堆区:由程序员手动分配和释放,完全不同于数据结构中的堆,分配方式类似链表。由malloc(C语言)或new(C++)语言来分配,free(c语言)和delete(C++)语言来释放。若程序员不释放,,程序结束时由系统释放。
2,栈区:由编译器自动分配和释放,存放函数参数,局部变量得值等。操作方式类似于数据结构中的栈。
3,全局静态区:存放全局变量和静态变量。包括DATA段(全局初始化区)与BSS段(全局未初始化区)。其中,初始化的全局变量和静态变量存放在DATA段,未初始化的全局变量和未初始化的静态变量存放在BSS段。程序结束后由系统释放。
4,文字常量区:常量字符串存放在这里。
5,程序代码区:存放函数体的二进制。
6,union的知识点
1,union中可以定义多个成员,union的大小由最大的成员的大小决定。
2,union成员共享同一块内存,一次只能使用其中一个成员。
3,对于某一个成员赋值,会覆盖其他成员的值(如果成员所占字节大小相同,则会覆盖所有的值,如果不同,则只会覆盖响应的字节值)
4,联合体union的存放顺序是所有成员都从低地址开始存放。