摘要:
1. 野指针 (1)指针变量中的值是非法的内存地址,进而形成野指针 (2)野指针不是 NULL 指针,是指向不可用内存地址的指针 (3)NULL 指针并无危害,很好判断,也很好调试 (4)C 语言中无法判断一个指针所保存的地址是否合法 2. 野指针的由来 (1)局部指针变量没有被初始化 (2)指针所 阅读全文
摘要:
1. 程序中的栈 1.1 栈的简介 (1)栈中现代计算机程序里最为重要的概念之一 (2)栈在程序中用于维护函数调用上下文 (3)函数中的参数和局部变量存储在栈上 (4)栈保存了一个函数调用所需的维护信息 1.2 函数调用过程 (1)每次函数调用都对应着一个栈上的活动记录,调用函数的活动记录位于栈的中 阅读全文
摘要:
1. 动态内存分配的意义 (1)C 语言中的一切操作都是基于内存的。 (2)变量和数组都是内存的别名。 ①内存分配由编译器在编译期间决定 ②定义数组的时候必须指定数组长度 ③数组长度是在编译期就必须确定的 (3)但是程序运行的过程中,可能需要使用一些额外的内存空间 2. malloc 和 free 阅读全文
摘要:
1. 指针阅读技巧:右左法则 (1)从最里层的圆括号中未定义的标示符看起 (2)首先往右看,再往左看 (3)遇到圆括号或方括号时可以确定部分类型,并调转方向 (4)重复 2、3 步骤,直到阅读结束 注意: 当读出是数组时,须读出元素个数、元素类型 当读出是函数是,须读出参数及类型,返回值类型 当读出 阅读全文
摘要:
1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值、参数类型和参数个数共同决定。如 int add(int i,int j)的类型为 int(int,int)。 (2)C 语言中通过 typedef 为函数类型重命名 typedef type name(parameter li 阅读全文
摘要:
1. 数组参数退化为指针的意义 (1)C 语言中只会以值拷贝的方式传递参数,当向函数传递数组时,将整个数组拷贝一份传入函数导致执行效率低下,C 语言以高效作是最初的设计目标,所以这种方法是不可取的。 (2)参数位于栈上,太大的数组拷贝将导致栈溢出。 (3)将数组名看做常量指针,传递的是数组的首元素地 阅读全文