C语言心得与基础知识由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言基础知识总结”。
1.把 i 的值定义为浮点型,逻辑上正确,但是严格来说不对 浮点数的存储带来的问题:
float,double都不能保证可以存储一个小数、近似值 1.213e+2 例题:如何判断浮点型变量 X 的值是否是零
if(|x-0.000001|
为什么循环更新的变量不能定义成浮点型?
心得:试数,数学归纳法,五次在纸上
2.自增[自减]
3.例子:回文数
12112321123
43214.什么时候使用while,什么时候使用for,多尝试!do...while 主要用于人机交互。
do{....} while(表达式);while 与 for 是等价的,可以相互转换; 数组为n个变量连续分配内存空间
所有的变量数据类型必须一样所有变量所占的字节大小必须相等
例子:
int [3];
初始化: 完全初始化
不完全初始化不初始化,所有元素是垃圾值
清零 int [3] = {0};一位数组名不代表数组中所有的元素,代表地址
是否存在多维数组,不存在因为内存是线性一维的,N维数组可以作为每个元素是N-1维数组的一维数组
6.游戏
分感官效果和内核设计两部分.感官效果,涉及图形技术图像技术、音频技术等等多媒体编程.内核设计,要做一个合理的游戏,必须在明确游戏思路和算法的前提下,精确定义玩家可以从事什么行为,不能从事的行为要怎么样标记,异常的操作又要怎么处理。7.函数定义的本质:详细描述之所以能够实现某个特定功能的具体方法
return表达式的含义:终止被调函数,向主函数返回表达式的值。如果表达式为空,则只终止函数不向主调函数返回值
函数返回值的类型也称为函数的类型,如果函数名前面的返回值类型和函数执行体 中的return,表达式中的类型不同的话,最终函数返回的类型一函数名的类型相同。函数分为有参函数和无参函数。库函数,自定义函数。有返回值,无返回值函数 普通函数和主函数,一个程序只能有且只有一个主函数。主函数可以调用普通函数。普通 函数可以相互调用。主函数是程序的入口,也是程序的出口。
{值传递 和地址传递函数}
8.指针
int * p;P是变量名,p变量的数据类型是int * 类型,而int *类型实际就是存放int 类型变量地址的 类型。*p代表的是以p的内容为地址的变量
指针就是地址,地址就是指针,地址就是内存单元的编号(门牌号),指针只是编号。指针变量是存放地址的变量。指针和指针变量是两个不同的概念。但是要注意,通常我们叙述时会把指针变量简称指针。
指针的重要性:表示一些复杂的数据结构,如链表,树,图等模拟现实的显示;快速的传递数据。使函数返回一个以上的值(普通函数返回一个值,return)。直接访问硬件。能够方便的处理字符串。是理解面向对象语言中的基础。。。指针是C语言的灵魂。
指针的分类:基本类型的指针;指针和数组;指针和函数;指针和结构体;
指针的定义:
地址:地址就是内存单元的编号(门牌号),地址是从零开始的非负整数。
范围:CPU(内存的速度快于硬盘)直接处理内存条里的数据。。CPU如何控制内存条,先把内存条的数据读入CPU里,CPU内部进行处理,把结果写回内存条,但内存条数据达到一定程度,会一次性写到硬盘。(控制线,地址线,数据线)。通过地址线能确定CPU对内存条的哪个单元进行控制。范围:【0--4G-1】
指针:指针变量就是存放内存单元编号的变量
指针的本质上就是一个操作受限的非负整数。(不能进行相加等运算,可以进行相减,连续空间的不同单元)。
基本类型的指针:
指针和数组:包括一维、二维数组。
一维数组名是一个指针常量,存放的是一维数组第一个元素的地址。
如果一个函数要处理一个一维数组,则需要接收该数组的哪些信息?界定一个一维数组要几个参数:
sizeof 的返回值就是给数据类型所占的字节数
一个指针变量无论他指向的变量占几个字节,该指针变量本身只占四个字节。
动态内存分配的问题:
数组的优点:存取速度快
传统数组的缺点:
数组的长度必须事先指定,不能是变量
例如:int a[5];int len = 7;int a[len];//错误
传统形式定义的数组,该数组的内存程序无法手动编程释放,只能在函数运行完毕后由系统自动释放。数字一旦定义,系统为该数组分配的存储空间就会一直在。。在一个函数运行期间,系统为该函数中所分配的空间会一直存在,直到函数运行完毕后由系统自动释放。
数组的长度不能在函数的运行过程中动态的扩充或缩小。数组的长度 一旦定义,其长
度就不能在改变。
A函数定义的数组在A函数运行期间可以被其他函数调用,当A运行完毕后,A函数中的数组将无法在其他函数使用。(A内的内存空间被释放啦)传统方式定义的数组不能跨函数使用。
为什么需要动态分配内存:
因为能解决传统数组的缺陷。传统数组也叫静态数组。
动态内存分配举例: int *p =(int *)malloc(4);//12行
/*1.要使用malloc函数,必须添加malloc.h这个头文件 2.malloc 函数只有一个形参,并且是整数 3.malloc(4)的4表示请求系统为本程序分配四个字节 4.malloc函数只能返回第一个字节的地址。5.地址,内存单元的编号。12行分配了8个字节,p变量占四个,p指向的内存也占四个字节
*/ 6.p本身所占的内存是静态分配的,p所指向的内存是动态分配的。
free(p);//把p指向的内存释放,p本身不能释放,而只有main函数终止由系统释放。静态内存与动态内存的比较:静态内存是由系统自动分配,由系统自动释放,静态是在栈分配的动态内存是由程序员手动分配,手动释放动态内存是在堆分配的。
跨函数使用内存的问题:
枚举:如果一个变量只有几种可能的值。。指将变的值一一列举出来。变量的值只限于列举出来的值的范围内。enum 枚举值称为枚举元素或者枚举常量。值 0,1,2,3.。。
算法:
通俗的定义:
解题的方法和步骤
狭义的定义:
对存储数据的操作 对不同的存储结构,要完成某一个功能所执行的操作不一样 例如:输出数组中所有的元素操作和要输出链表中所有的元素操作不一样...说明了算法依附于存储结构的,不同的存储结构所执行的算法不一样。
广义的定义:
广义的算法也叫泛型。无论数据如何存储的,对该数据的操作都是一样的。我们至少可以通过两种结构来存储数据,一个是数组,一个是链表。
链表:
头结点(其数据类型和首节点的类型是一摸一样的,头结点是首节点前面那个节点,头结点不存放有效数据,设置头结点的目的是方便对链表的操作),头指针(存放头结点地址的指针变量),首节点(存放第一个有效数据的节点),尾节点
头指针->头结点->首节点->.......->尾节点(null)
确定链表需要一个参数:头指针
优点:插入删除元素效率高,不需要一个连续的很大的内存。
NULL本质也是零,而零 不代表数字零,而代表的是内存单元的编号零。\以零为编号的存储单元不可读不可写
字符串是作为字符数组来处理的,字符串中的字符是逐个存放到数组元素中的,字符串的实际长度与数组的实际长度相等。字符串结束标志: ‘ ’例如:C Program 共有9个字符,但内存占10个字节,字符串作为一维数组存放在内存中。缺点:查找某个位置的元素效率低
1、C中内存分为四个区
栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。
堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。
全局局:用来存放全局变量和静态变量。存在于程序的整个运行期间,是由编译器分配和释放的。
文字常量区:例如char *c = “123456”;则”123456”为文字常量,存放于文字常量区。也由编译器控制分配和释放。
程序代码区:用来存放程序的二进制代码。