文章目录
入门
c语言是面向过程还是面向对象的语言?
C语言是一门面向过程的语言。所谓面向过程就是以事件作为我们编程的中心。比如说我要去复试,首先应该将初试成绩达到复试线,然后再进行复试复习,然后坐车去往考点。通过这个例子我们知道了,面向过程就是一步一步地去设计步骤最终完成事件,是以事件为导向。
c和c++的比较
- C语言面向过程,重点在于算法和数据结构。C程序的设计首先考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控 制)。
- C++语言是面向对象语言,首先考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的 问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 它在C的基础上添加了面向对象、模板等现在程序设计语言的特性。拓展了面向对象设计的内容,如类、继承、虚函数、模板和容器类等等,使之更加符合现代程序设计的需要。
- C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计(泛型编程),还可以进行以继承和多态为特点的面向对象的程序设计(面向对象编程),支持类、封装、继承、多态等特性
c语言的数据类型
变量名需要满足:
符号常量和const常量
格式化输入和输出
C语言的三种基本的结构化程序设计方法?
- 顺序结构:最基本的一种结构,执行顺序就按照从上到下执行就行啦,执行起来就是一溜烟地执行完。
- 选择结构:顾名思义就是我们在执行下一条语句之前会根据一个条件做出判断,我们应该选择下面哪一条或者一段语句。这样就引入了分支的概念,程序也就可以开枝散叶了。
- 循环结构:当我们需要重复处理一段相同逻辑的代码时我们就可以采用循环结构,这样就可以大大减少我们的代码量,也便于我们理解程序逻辑。
模块化编程有什么好处?
把复杂的问题简单化:把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块;
有利于程序的设计和调试;
有利于程序的优化和分工;
提高了程序的阅读性和可靠性。
文件操作
数组
链表与数组的对比?
数组静态分配内存,链表动态分布内存。
数组在内存中是连续存储的,链表不是。
数组利用下标定位元素,查找的时间复杂度为O(1),链表通过遍历定位元素,查找的时间复杂度是O(N)。
数组插入和删除需要移动其他元素,时间复杂度是O(N),链表的插入或删除不需要移动其他元素,时间复杂度是O(1)。
数组优点:查找元素速度快。
数组缺点: 插入和删除效率比较低、会造成内存浪费,扩展性差创建时就已经固定。
链表优点:插入和删除效率高、内存利用率高、动态性强。
链表缺点:查找效率低。
指针
指针是一种内存地址,而指针变量是一种表示内存地址的变量。我们如果要想使用这个地址里面所存的数据,那么我们可以加入来实现,这个我查到了叫做间接寻址运算符。还有就是以下几个知识点要清楚,指针常量、常量指针、指针数组、数组指针。
-
指针常量的本质是一个常量,并且使用指针来修饰它,那么说明这个常量的值应该是一个指针,其格式应为:int * const p。
-
常量指针本质是指针,常量修饰它,表示这个指针是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。
-
指针数组在本质上是一个数组,只不过我们的数组里面全部存的都是指针变量。
-
数组指针本质上一个指针,它是指向数组首地址的一个指针
struct结构体和union联合
变量
本地变量和全局变量
- 全局变量是整个程序都可访问的变量,谁都可以访问,生存期在整个程序从运行到结束(在程序结束时所占内存释放);
- 局部变量存在于模块(子程序,函数)中,只有所在模块可以访问,其他模块不可直接访问,模块结束(函数调用完毕),局部变量消失,所占据的内存释放。
- 操作系统和编译器,可能是通过内存分配的位置来知道的,全局变量分配在全局数据段并且在程序开始运行的时候被加载.局部变量则分配在堆栈里面。
静态变量和动态变量
(1) 动态全局变量:
作用域为整个项目,即最终编译成可执行文件的所有文件中均可以使用动态全局变量。跨文件的全局变量一般都会加一个extern。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。
(2 )静态全局变量:
作用域为当前文件,从定义/声明位置到文件结尾。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。
(3) 动态局部变量:
作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从函数调用到函数退出。
无显式初始化时默认初始化值为随机值。
(4) 静态局部变量:
作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从程序运行到程序退出,即贯穿整个运行时间,当下次函数调用时,静态局部变量不会被再次初始化,而是沿用上次函数退出时的值。
无显式初始化时默认初始化值为0。