C语言提高
文章平均质量分 65
flying_wild_fox
坚持!
展开
-
【C语言提高52】链表的基本操作
typedef struct Node{ int data; struct Node*next;}SLIST;//创建链表 返回头结点SLIST*SList_Creat(); //创建链表//顺序访问链表中各结点的数据域int SList_Print(SLIST*pHead); //遍历链表//在单向链表中插入节点int SList_NodeInsert(S原创 2016-01-13 15:20:40 · 591 阅读 · 0 评论 -
【C语言提高37】结构体做函数参数进阶
在堆上分配内存 并用二级指针做输出://结构体数组 3 输入老师年龄 排序#include#include#include#includetypedef struct teacher{ char name[64]; int age; int id;}teacher;void printfTeacher(teacher*array, int num){ i原创 2016-01-07 00:33:29 · 640 阅读 · 0 评论 -
【C语言提高37】结构体元素做函数参数与结构指针做函数参数
结构体元素做函数参数:结构体元素做参数 形参只能复制实参的值 并不能得到实参的地址 所以实参根本还没有任何变化void copyTeacher(Teacher to,Teacher from){ to = from;}void main(){ Teacher t1 = {"aaa",32,02}; Teacher t2; memset(&t2,0,sizeof原创 2016-01-06 12:48:07 · 764 阅读 · 0 评论 -
【C语言提高36】结构体类型和变量定义及基本操作
定义一个结构体类型://定义了一个数据类型 这个数据类型叫struct Teacher //固定内存块大小的别名 使用该数据类型的时候才会分配内存struct Teacher {char name[64];int age;int id;};//类型的重定义typedef struct teacher{char name[64];原创 2016-01-05 23:43:02 · 449 阅读 · 0 评论 -
【C语言提高35】数组指针和指针数组
指针 数组 每一个元素都是一个指针类型好比 int 数组 每一个元素都是int类型char* char*Myarray[] = {"111","3333","aaaa"};char*型的数组 每一个元素都是char*的指针 元素名Myarray[0] 指向"111"这块内存空间数组 指针 用一个指针来指向数组 数组的指针 某某的指原创 2015-12-17 00:54:57 · 563 阅读 · 0 评论 -
【C语言提高34】数组指针变量的定义
方法1: 用数组类型 *: void main(){ typedef int(MyArrayType)[5]; //本身相当于一级指针 数组嘛 给5个int的内存 起了一个MyArrayType的别名 int[5]本身就是一种数据类型 int i = 0; //MyArrayType myArray;// 等价于 int myArray[5]; //用类型定义变量原创 2015-12-17 00:40:42 · 382 阅读 · 0 评论 -
【C语言提高33】数组指针类型定义
数组指针用于指向一个数组int a[10]数组名是数组首元素的起始地址,但并不是数组的起始地址通过将取地址符&作用于数组名可以得到整个数组的起始地址定义数组指针 有两种:1)通过数组类型定义数组指针: typedef int(ArrayType)[5]; // 给int[5]类型起了一个别名叫ArrayTypeArrayType* point原创 2015-12-17 00:17:02 · 274 阅读 · 0 评论 -
【C语言提高32】数组类型
数组类型:C语言中的数组有自己特定的类型 数组的类型由元素类型和数组大小共同决定例:int array[5]的类型为int[5]定义数组类型: void main(){int i = 0;//声明一个数组类型typedef int(MyArray)[5]; //定义了一个数据类型 数组数据类型MyArray myArray;原创 2015-12-16 23:49:12 · 282 阅读 · 0 评论 -
【C语言提高31】数组基础概念
概念1)元素类型角度:数组是相同类型的变量的有序集合测试指针变量占有内存空间大小2)内存角度:联系的一大片内存空间 数组初始化://数组元素的个数可以显示或隐式指定//分析数组初始化{0}与memset比较int main(){ int i = 0; int a[10] = {1,2}; //其他初始化为原创 2015-12-16 23:21:10 · 295 阅读 · 0 评论 -
【C语言提高29】两个辅助指针变量挖字符串
#include#include#include#includeint spitString(char*buf1,char c,char buf2[10][30],int*count){ //strcpy(buf2[0], "aaaaa"); //strcpy(buf2[1], "bbbbbb"); char *p = NULL, *pTmp = NULL; int tmpco原创 2015-12-06 19:57:03 · 612 阅读 · 0 评论 -
【C语言提高27】二级指针三种内存模型总述
//二级指针三种内存模型void main51(){ int i = 0; //01指针数组 char* p1[] = {"123","456","789"}; //02二维数组 char p2[3][4] = { "123", "456", "789" }; //03手工二维内存 char **p3 = (char**)malloc(sizeof(char*原创 2015-12-06 11:01:50 · 366 阅读 · 0 评论 -
【C语言提高24】二级指针做输入的第一种内存模型:数组指针
打印排序:#include#include#include#includevoid main(){ int i = 0, j = 0; int num = 0; char*tmp = NULL; //数组 只不过每一个元素都是指针--->指针数组 char* myArray[] = {"aaaaaa","ccccc","bbbbb","1111111"}; //打印原创 2015-12-04 18:24:32 · 613 阅读 · 0 评论 -
【C语言提高38】结构体套一级指针
//结构体数组 3 输入老师年龄 排序#include#include#include#includetypedef struct teacher{ char name[64]; char*alisname; //分配了四个字节的内存 需要显式的分配内存 嵌套套一级指针 int age; int id;}teacher;void printfTeacher原创 2016-01-07 00:59:43 · 334 阅读 · 0 评论 -
【C语言提高40】结构体套一级指针和二级指针
//结构体数组 3 输入老师年龄 排序#include#include#include#includetypedef struct teacher{ char name[64]; char*alisname; //分配了四个字节的内存 需要显式的分配内存 char**sName; int age; int id;}teacher;void printfT原创 2016-01-07 01:01:30 · 1106 阅读 · 0 评论 -
【C语言提高51】链表基本概念与静态链表
链表是一种物理存储单元上非连续的存储结构,由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成,节点与节点之间通过指针链接。每个结点包括两个部分:一部分是存储数据元素的数据域,另一部分是存储下一个结点地址的指针域。链表是一种物理存储单元上非连续的存储结构,由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成,节点与节点之间通过指针链接原创 2016-01-13 14:54:19 · 989 阅读 · 0 评论 -
【C语言提高50】Win32环境下动态链接库(DLL)编程原理
比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。其中可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的原创 2016-01-13 14:28:19 · 1124 阅读 · 0 评论 -
【C语言提高49】按照块读写文件
块方式: 直接把内存数据 写入到文件中typedef struct Teacher{ char name[64]; int age;}Teacher;读:void main_fread(){ int i = 0; int myN; FILE*fp = NULL; char*fileName = "D:/3.data"; Teacher tArray[3];原创 2016-01-10 13:04:29 · 452 阅读 · 0 评论 -
【C语言提高48】按照行读写文件
3 内存打包技术(把内存首地址+内存的长度)按照行读:void main02_gets()//读{ //句柄就是一个内存块的首地址 或者是一个资源的首地址 int i = 0; FILE*fp = NULL;//文件句柄 //char*filename = "c:\\1.txt";//windows下 char*filename2 = "D:/2.txt原创 2016-01-10 13:03:30 · 610 阅读 · 0 评论 -
【C语言提高47】按照字符读写文件
char*filename = "C:\\1.txt"; //windows下char*filename2 = "D:/2.txt"; //windows和linux下 句柄就是一个内存块的首地址 或者是一个资源的首地址按字符读:void main02_fgetc()//读{ int i = 0; FILE*fp = NULL;//文件句柄 char原创 2016-01-10 12:59:34 · 309 阅读 · 0 评论 -
【C语言提高46】【文件操作API】----- 非标准文件的读写
1.文件的打开和关闭:int open(char*filename, int access);该函数表示按access的要求打开名为filename的文件,返回值为文件描述字,中access有两部分内容:基本模式和修饰符, 两者用" "("或")方式连接。修饰符可以有多个, 但基本模式只能有一个access的规定-----------------原创 2016-01-10 12:33:19 · 560 阅读 · 0 评论 -
【C语言提高45】【文件操作API】----- 标准文件的读写
1.文件的打开fopen() :文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程序就可用此FILE指针来实现对指定文件的存取操作了。当使用打开函数时,必须给出文件名、文件操作方式(读、写或读写),如果该文件名不存在,就意味着建立(只对写文件而言,对读文件则出错),并将文件指针指向文件开头。若已有一个同名文件存在,则删除该文件,若无原创 2016-01-10 11:46:46 · 1257 阅读 · 0 评论 -
【C语言提高44】【文件操作API】------文件api的分类
01)文件读写api fgetc fputc 按照字符读写文件 fputs fgets 按照行读写文件 (读写配置文件) fread fwirte 按照块读写文件 (大数据块迁移) fprintf原创 2016-01-10 11:45:09 · 423 阅读 · 0 评论 -
【C语言提高43】c语言文件读写概念
文件分类:v 按文件的逻辑结构: l 记录文件:由具有一定结构的记录组成(定长和不定长) l 流式文件:由一个个字符(字节)数据顺序组成v 按存储介质:l 普通文件:存储介质文件(磁盘、磁带等)l 设备文件:非存储介质(键盘、显示器、打印机等)v 按数据的组织形式:l 文本文件: ASCII文件,每个字节存放一个字符的ASCII码l原创 2016-01-10 11:19:52 · 491 阅读 · 0 评论 -
【C语言提高42】结构体的高级话题:偏移量
结构体中的偏移量是指:结构体中元素地址相对于大结构体起始地址的偏移大小定义如下一个结构体:typedef struct AdvTeacher{ char name[64]; //64字节 t1.age 相对结构体的偏移量是64 int age; //4 int p; //4 t1.p 相对结构体偏移量是68原创 2016-01-09 10:50:11 · 643 阅读 · 0 评论 -
【C语言提高41】结构体的浅copy和深copy
编译器的=操作 只会把指针变量值 从from拷贝到to 但不会把指针变量所指的内存空间的拷贝过去 //浅拷贝 void copyTeacher(Teacher*to,Teacher*from){ //*to=*from; memcpy(to,from,sizeof(Teacher));}浅考本出现在结构体中套一个一级指针或者是二级指针如果想执行深c原创 2016-01-09 10:39:54 · 352 阅读 · 0 评论 -
【C语言提高26】二级指针做输入的第三种内存模型:手工打造二维内存
打印 排序://自己打造内存空间void main(){ int i = 0,j=0; char** p2 = NULL; char*tmp; char tmpbuf[100]; int num = 5; p2 = (char**)malloc(sizeof(char*)*num); for (i = 0; i < num;i++) { p2[i] = (char*)原创 2015-12-06 10:57:15 · 469 阅读 · 0 评论 -
【C语言提高25】二级指针做输入的第二种内存模型:二维数组
打印 排序:void main(){ int i = 0,j=0; int num = 4; char tmpbuf[30] = {0}; char myBuf[30] = {0}; char myArray[10][30] = { "aaaaaa", "ccccc", "bbbbb", "1111111" }; //打印 for (i = 0; i < num; i++原创 2015-12-06 10:25:50 · 424 阅读 · 0 评论 -
【C语言提高30】二级指针强化训练[02]
#include#include#include#include//主调函数分配内存 char** spitString3(char*buf1, char c, int*count){ //strcpy(buf2[0], "aaaaa"); //strcpy(buf2[1], "bbbbbb"); char *p = NULL, *pTmp = NULL原创 2015-12-06 23:40:52 · 548 阅读 · 0 评论 -
【C语言提高12】间接赋值从0级指针到1级指针
#include#include#include//指针做函数参数间接改变我们的运算结果int getFoleLen(int*p){ *p = 40; return true;}//这样只能修改形参的值 不能改变实参的值 //不通过操作地址的话 编译器是将实参的值复制给形参 而不是把实参传递进来int getFoleLen(int b){ //形参变量和原创 2015-11-30 20:45:54 · 429 阅读 · 0 评论 -
【C语言提高11】野指针
//野指针产生的原因//指针变量和它所指向的内存空间是两个不同的概念//释放了指针变量所指的内存空间 但指针变量没有重置为null//做成释放后 if(p!=NULL)仍然成立 因为指针变量还存着所指向内存空间的地址 但是这块内存被释放了//避免办法:// 1)初始化的时候 初始为NULL// 2)释放指针所指的内存空间后 紧接着把指针重置为nul原创 2015-11-30 16:48:35 · 294 阅读 · 0 评论 -
【C语言提高10】【指针铁律】铁律4:应用指针必须和函数调用相结合(指针做函数参数)
指针做函数参数,问题的实质不是指针,而是看内存块,内存块是1维、2维。如果基础类int变量,不需要用指针;若内存块是1维、2维。原创 2015-11-30 16:45:25 · 426 阅读 · 0 评论 -
【C语言提高09】【指针铁律】铁律3:理解指针必须和内存四区概念相结合
主调函数 被调函数主调函数可把堆区、栈区、全局数据内存地址传给被调用函数被调用函数只能返回堆区、全局数据内存分配方式指针做函数参数,是有输入和输出特性的。原创 2015-11-30 16:41:08 · 372 阅读 · 0 评论 -
【C语言提高08】【指针铁律】铁律2:间接赋值(*p)是指针存在的最大意义
1)两码事:指针变量和它指向的内存块变量2)条件反射:指针指向某个变量,就是把某个变量地址否给指针3)*p间接赋值成立条件:3个条件 a) 2个变量(通常一个实参,一个形参) b) 建立关系,实参取地址赋给形参指针 c) *p形参去间接修改实参的值4)引申:函数调用时,用n指针(形参)改变n-1指针(实参)的值。原创 2015-11-30 16:38:17 · 608 阅读 · 0 评论 -
【C语言提高07】【指针铁律】铁律1:指针是一种数据类型
指针也是一种变量,占有内存空间,用来保存内存地址测试指针变量占有内存空间大小*p操作内存在指针声明时,*号表示所声明的变量为指针在指针使用时,*号表示操作指针所指向的内存空间中的值 *p相当于通过地址(p变量的值)找到一块内存;然后操作内存 *p放在等号的左边赋值(给内存赋值) *p放在等号的右边取值(从内存获取值原创 2015-11-30 15:18:46 · 493 阅读 · 0 评论 -
【C语言提高06】栈的开口问题
/开口向下的栈先分配大地址//开口向上的栈先分配小地址//一般情况下 操作系统提供的堆栈是向下的//不管栈开口朝那 数组buf的内存地址buf+1永远向上开口检测:#include#include#includevoid main(){ int a; int b; printf("%d %d",&a,&b); system("pause原创 2015-11-30 13:59:29 · 1219 阅读 · 0 评论 -
【C语言提高05】静态存储区
#include#include#includechar* getStr1(){ char*p1 = "abcdefg"; //开辟的空间属于全局区 return p1;}//这两个字符串是一样的 所以c++编译器只会开辟一个内存空间 并不是两个char* getStr2(){ char*p2 = "abcdefg"; return p2;}void main51(原创 2015-11-30 13:26:25 · 382 阅读 · 0 评论 -
【C语言提高04】程序的内存四区模型
内存四区的建立流程: 流程说明1、操作系统把物理硬盘代码load到内存2、操作系统把c代码分成四个区3、操作系统找到main函数入口执行各区元素分析:原创 2015-11-29 21:34:30 · 477 阅读 · 0 评论 -
【C语言提高03】变量本质
变量概念: 既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。变量本质: 1、程序通过变量来申请和命名内存空间 int a = 0 2、通过变量名访问内存空间 (一段连续)内存空间的别名(是一个门牌号) 3,修改变量有几种方法? 1、直接原创 2015-11-29 21:24:38 · 385 阅读 · 0 评论 -
【C语言提高02】数据类型本质
数据类型概念“类型”是对数据的抽象 类型相同的数据有相同的表示形式、存储格式以及相关的操作 程序中使用的所有数据都必定属于某一种数据类型数据类型的本质:数据类型可理解为创建变量的模具(模子);是固定内存大小的别名 数据类型的作用:编译器预算对象(变量)分配的内存空间大数据类型的封装:原创 2015-11-29 21:07:25 · 486 阅读 · 0 评论 -
【C语言提高13】二级指针
二级指针的概念: 任何值都有地址 ,一级指针的值虽然是地址,但这个地址做为一个值亦需要空间来存, 是空间就具有地址 ,这就是存放地址这一值的空间 所具有的地址,二级指针就是为了获取这个地址 一级指针所关联的是其值(一个地址)名下空间里的数据,这个数据可以是任意类型并做任意用途,但二级指针所关联的数据只有一个类型一个用途,就是地址原创 2015-11-30 23:35:17 · 439 阅读 · 0 评论