C++ 常见错误总结

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的存放顺序是所有成员都从低地址开始存放。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值