预习第六、七章

一、数据放在内存的哪里?

.bass段:存放没有初始化和初始化为0的全局变量,bss类型的全局变量只占运行时的内存空间,不占用文件空间,在整个程序运行周期内,bass数据是一直存在的。

.data段:存放初始化过的全局变量,data类型的全局变量,既占文件空间,又占用运行时的内存空间。

.rodata:常量数据

.text段:存放代码(如函数)和部分整数常量

栈:存放临时变量和函数参数,栈是一种基本的数据结构,可以用来实现函数的调用

堆:最灵活的一种内存,它的生命周期完全由使用者控制

二、内存分配的方式:

从静态存储区域分配;在栈上创建;从堆上分配。

三、野指针是什么?

野指针不是NULL指针,是指向“垃圾”内存的指针。野指针的成因:指针变量没有被初始化;指针被free或delete之后,没有置为NULL,让人误以为指针合法。

四、段错误是什么?如何调试?

产生段错误就是访问了错误的内存块,方法:①利用gdb逐步查找段错误;②分析core文件;③段错误时启动调试;④利用backtrace和objdump进行分析

五、使用宏定义的注意点:宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号一起置换;宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束,如果要终止作用域可使用“undef命令”;宏定义在源程序中若用引号括起来,则预处理程序不对其进行宏替换;宏定义允许嵌套;可以对“输出格式”做宏定义。

六、带参宏定义与自定义函数的区别是什么?

在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义,在带参宏中,只是符号代换,不存在值传递的问题;在宏定义中的形参是标识符,而宏调用中的实参可以是表达式

七、包含命令中的文件名用双括号和尖括号扩起来有什么区别?
使用尖括号表示在包含文件目录中查找(包含目录是用户在设置环境时设置的),而不在源文件目录中去查找;

使用双引号是首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。

八、结构体和数组的异同点是什么?

都由多个元素组成;各个元素在内存中的存储空间都是连续的;数组中各个元素的数据类型相同,而结构体中的各个元素的数据类型可以不相同。

九、结构体和联合体的区别是什么?

在任何同一时刻,union中只存放了一个被选中的成员,而struct的所有成员都存在;在struct中所有成员都占有自己的内存空间,他们同时存在,一个struct变量的总长度等于所有成员长度之和,在union中,所有成员不能同时占用他们的内存,不能同时存在,union变量的长度等于最长的成员的长度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值