1:(.bss段):直观来说即存放没有初始化或者初始化为0的全局变量,一定是全局变量。
2:(.data):通俗来说(.data段)和(.bss)没有太大的区别,只是前者是存放未初始化或者初始化为0的全局变量,而后者是用来存放那些初始化不为0的全局变量。注意:两个都只是存放的全局变量
3:代码段:直观理解为函数堆叠而成的。
4:栈:栈用来存放局部的变量和函数参数,当一个函数用完这些局部的变量之后,栈里面的东西就会被释放出来,栈可理解为一个箱子,最先放进去的书本在最下面,若放箱子装满之后,最先取出的是最后放进去的书本,而最开始放进去的书本要最后才能取得出来。
5:堆:堆和栈最大的一个区别在于栈的空间在那个函数用完之后会自己释放,而在堆里面的内存空间必须要使用者自己释放,并且堆里面存放的内存是使用者自己申请的内存空间,列:用malloc申请的空间在用完之后应用free释放出来,否则会存在内存泄漏的问题产生。
6:宏定义:格式:#define 标识符 字符串。之后再函数中使用到标识符的地方全部用字符串代替
7:什么是条件编译:一般情况下代码的每一行都会被编译,但有时候需要在某些条件下对部分代码进行编译。
8:#和##的区别:#是把宏参数变为一个字符串,##是把两个宏参数连接在一起,注意只能连接两个宏参数
9:什么是联合体:在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。
10:结构体与联合体区别:联合体的各个成员共用内存,并应该同时只能有一个成员得到这块内存的使用权(即对内存的读写),而结构体各个成员各自拥有内存,各自使用互不干涉。所以,某种意义上来说,联合体比结构体节约内存