摘要:
程序中的栈 + 栈是现代计算机程序里面最为重要的概念之一 + 栈在程序中用于维护函数调用上下文 + 函数中的参数和局部变量存储在栈上 + 栈保存了一个函数调用所需的维护信息 + 参数 + 返回地址 + 局部变量 + 调用上下文 + ... 函数调用过程 + 每次函数调用都对应一个栈上的活动记录 + 阅读全文
摘要:
程序文件的一般布局 程序与进程 + 程序和进程不同 + 程序是静态的概念,表现形式为—个可执行文件 + 进程是动态的概念,程序由操作系统加载运行后得到进程 + 每个程序可以对应多个进程 + 每个进程只能对应—个程序 思考 面试中的小问题 包含脚本代码的文本文件是—种类型的可执行程序吗?如果是,对应什 阅读全文
摘要:
动态内存分配的意义 + C语言中的一切操作都是基于内存的 + 变量和数组都输内存的别名 + 内存分配有编译器在编译期间决定 + 定义数组的时候必须指定数组长度 + 数组长度是在编译期就必须确定的 malloc与free malloc和free用于执行动态内存分配和释放 + malloc所分配的是一块 阅读全文
摘要:
指针阅读技巧解析 右左法则 + 从最里面的圆括号中未定义的标识符看起 + 首先往右看,再往左看 + 遇到圆括号或者方括号时可以确定部分类型,并调转方向 + 重复2,3步骤,知道阅读结束 复杂指针的阅读 例子1 :复杂指针 int( p1)(int , int ( f)(int )); == p1为指 阅读全文
摘要:
函数类型 + C语言中的函数有自己特定的类型 + 函数的类型由返回值,参数类型和参数个数共同决定 + int add(int i, int j)的类型为int(int, int) + C语言中通过typedef为函数类型里命名 + typedef type name(parameter list) 阅读全文
摘要:
思考 为什么C语言中的数组参数会退化为指针? 退化的意义 + C语言中只会以值拷贝的方式传递参数 + 向函数传递数组时: + 将整个数组拷贝一份传入函数?(X) + 将数组名看做常量指针传数组首元素地址 C语言以高效作为最初设计目标 + 参数传递的时候如果拷贝整个数组执行效率将大大下降 + 参数位于 阅读全文
摘要:
指向指针的指针 + 指针的本质是变量 + 指针会占用一定的内存空间 + 可以定义指针的指针来保存指针变量的地址值 问题 为什么需要指向指针的指针 + 指针在本质上也是变量 + 对于指针也同样存在传值调用和传址调用 例子1 :重置动态空间大小 c include include int reset(c 阅读全文
摘要:
main函数的概念 + C语言中main函数称之为主函数 + 一个c程序从main函数开始执行的 下面的main函数定义正确吗? main函数的本质 + main函数是操作系统调用的函数 + 操作系统总是将main函数作为应用程序的开始 + 操作系统将main函数的返回值作为程序的退出状态 例子1: 阅读全文
摘要:
数组指针和指针数组分析 思考 下面这些声明合法吗? 问题: + array代表数组首元素的地址,那么matrix代表什么? + array和&array的地址值相同,但是意义不同,那么它们所代表的类型相同吗 数组类型 + C语言中的数组有自己特定的类型 + 数组的类型由元素类型和数组大小共同决定 例 阅读全文
摘要:
典型问题一 下面的程序输出什么?为什么? 分析: snprintf()函数本身是可变参数函数,原型如下: 注意:当函数有3个参数时,如果第三个参数没有包含格式化信息,函数调用没有问题;相反,如果第三个参数包含了格式化信息,但缺少后续相应参数,则程序行为不确定。 典型问题二 下面的程序输出什么?为什么 阅读全文