iOS面试题-C部分
### iOS面试题-C部分知识点详解 #### 一、Static关键字的作用 1. **隐藏功能**:当我们在编译多个文件时,所有未加`static`前缀的全局变量和函数都具有全局可见性。添加`static`关键字后,变量或函数的作用域仅限于当前文件,从而实现了对其他文件的隐藏。 2. **保持变量内容的持久性**:存储在静态数据区的变量会在程序启动时完成初始化,并且只初始化一次。有两种类型的变量存储在静态存储区:全局变量和`static`变量。与全局变量相比,`static`变量可以更好地控制变量的可见范围。归根结底,`static`的主要目的还是为了实现隐藏。 3. **默认初始化为0**:全局变量也具备这个特性,因为它们同样存储在静态数据区。在静态数据区中,内存中的所有字节默认值都是0x00。这意味着,在静态数据区中声明的变量如果没有明确给出初始值,则默认为0。这在某些情况下可以减少程序员的工作量,避免手动初始化。 #### 二、线程与进程的区别和联系 1. **定义**:一个进程可以拥有一个或多个线程。进程是指正在运行中的程序的一个实例,而线程是进程中的一个执行单元,是CPU调度的基本单位。 2. **资源分配**:每个进程都有自己的独立内存空间,而线程共享所属进程的内存资源。 3. **创建与销毁**:创建一个新的进程要比创建一个新的线程消耗更多的资源和时间。这是因为创建一个新的进程需要复制父进程的环境和资源,而创建一个新的线程只需要在同一个进程中分配一点额外的资源。 4. **通信机制**:线程间的通信更加简单高效,因为它们共享同一进程的内存空间。进程间通信需要通过系统调用等机制来实现,相对复杂。 5. **并发性**:由于线程共享同一进程的资源,因此线程之间的切换和调度成本较低,这使得多线程程序能够更有效地利用CPU资源。 #### 三、堆和栈的区别 1. **栈区**:由编译器自动分配释放,用于存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈,即后进先出(LIFO)。 2. **堆区**:通常由程序员负责分配和释放,如果程序员不释放,程序结束时可能由操作系统(OS)回收。堆区用于动态分配内存,如使用`malloc`、`calloc`等函数分配的内存。 #### 四、判断两个单向无环链表是否相交 对于两个单向无环链表,可以通过以下方法判断它们是否相交: 1. 首先遍历两个链表,找到各自的尾节点。 2. 比较这两个尾节点的地址,如果地址相同,则表示这两个链表相交;如果地址不同,则表示这两个链表不相交。 #### 五、程序在内存中运行时的分区及其用途 1. **栈**:由编译器自动分配和释放,主要用于存放函数的参数值、局部变量的值等。 2. **堆**:由程序员分配释放,如果程序员不释放,程序结束时可能由OS回收。 3. **全局区(静态区)**:全局变量和静态变量的存储是放在一块的,分为两部分:初始化的全局变量和静态变量位于一个区域,未初始化的全局变量和未初始化的静态变量位于另一个相邻的区域。 4. **常量区**:专门存放常量,如字符串常量等。 #### 六、引用与指针的区别 1. **概念**:指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 2. **使用方式**:引用使用时不需解引用(`*`),指针需要解引用。 3. **初始化**:引用只能在定义时被初始化一次,之后不可变;指针可以在任何时候改变指向。 4. **`const`修饰**:引用没有`const`,指针有`const`。 5. **空值**:引用不能为空,指针可以为空。 6. **`sizeof`运算**:`sizeof`引用得到的是所指向的变量(对象)的大小,而`sizeof`指针得到的是指针本身的大小。 7. **自增运算**:指针和引用的自增运算意义不一样。 8. **内存分配**:程序为指针变量分配内存区域,而引用不需要分配内存区域。 #### 七、编程示例解析 1. **示例1**:运行`Test`函数的结果是程序崩溃。因为`GetMemory`函数并不能传递动态内存给`str`,所以在`Test`函数中`str`始终为`NULL`。尝试使用`strcpy(str,"helloworld")`将会导致程序崩溃。 2. **示例2**:运行`Test`函数可能会显示乱码。因为`GetMemory`返回的是指向栈内存的指针,该指针指向的内存可能已经不再有效,因此输出的内容未知。 3. **示例3**:运行`Test`函数能够正确输出"hello",但是存在内存泄漏的问题。`GetMemory2`函数动态分配了内存给`str`,但在`Test`函数中没有释放这块内存。 4. **示例4**:代码片段不完整,但从现有代码来看,`free(str)`将会释放`str`指向的内存,但由于缺少完整的上下文,无法确定最终结果。 以上是针对题目中提到的关键知识点的详细解释和分析。希望这些内容对您的复习和准备有所帮助。
- 粉丝: 11
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- virtio-win-0.1.248.iso版本驱动
- 谷歌小恐龙训练模型Chrome-Dino-run-RL-main
- 基于SpringBoot+Vue.JS前后端分离的健康饮食管理系统 源码+数据库+录屏(毕业设计)
- Devart-UniDAC-v9.40 源码版
- Cisco 思科 CP-7945g 7965g sip模式固件 9.4.2
- 贪吃蛇方案设计的方法.zip
- 微信支付账单(20240731-20240731).zip
- minio20240920.tar
- 集成供应链(Integrated Supply Chain,ISC)核心业务流程再造,华为的最佳实践
- zabbix-server-pgsql-7.0-centos-latest.tar
- 1
- 2
前往页