
文件管理例子说明.h文件首先 #ifndef _名字_H_ //意味如果没定义名字这个文件那么下面这一行就进行定 #define _名字_H_ 义如果后期再用这个会发现之前那轮已经定义过 了第一行条件就不成立了那就往下执行 接着看.c文件里面引用了哪些函数就include哪些函数自己写的函数就“”库函数就 最后看.c文件里面我造了哪些新函数再.h文件里要进行声明最最后一定记得要 #endif.c文件头文件起名叫做什么头文件就包含的是什么用“”因为是自己造的指针指针是C语言中的一个重要概念也是C语言的一个重要特色。正确而灵活地运用它可以有效地表示复杂的数据结构 //下一个阶段 数据结构能动态分配内存 //指针 提供了一个能力 --直接使用内存方便地使用字符串有效而方便地使用数组在调用函数时能获得1个以上的结果能直接处理内存单元地址等这对设计系统软件是非常必要的。指针是啥计算机的内存是按字节进行编址的 --- 一个字节一个地址编号(地址)地址 --- (通过地址信息 可以知道 想要目标)看地址值 --- 本身也是一种数值能不能像普通变量 也开一块空间 来存放这个值指针的概念指针 (pointer) --- 指针 就是 地址 地址 就是内存单元的编号指针类型想要存储 或 处理指针这种数据int a 10; //a是int类型int 类型 ---- 这是一种整数类型 --可以用来处理整数这种数据 以及 相关运算指针类型---- 这是一种数据类型 -- 可以用来处理 指针 这种数据 以及 相关运算指针数据 和 整型数据区别?房间编号 1000 数值 1000内存单元编号 1000除了得到了1000这个数字之外还知道了它的位置[小结]1.指针是啥?指针 就是地址。地址就是内存单元编号2.指针值指针数据就是内存单元编号(地址)3.指针类型专门处理 地址内存单元编号 这种数据地址 不是一个单纯的数值 而是具有 地址含义 数值语法定义一个指针类型的变量定义指针变量的一般形式为基类型 * 指针变量名;(1) (2) (3)说明:(1)基类型: 表示的是指针(地址) 所指向的空间的 数据类型(2) * : 定义指针变量时只是用来说明该变量 是指针类型(3)指针变量名: 就是一个标识符 和 普通变量的命名规则一致int * p; //定义了一个指针变量p//定义了一个指向int型数据的指针变量p//定义了指针变量 意味着也要开空间空间开多大 --- 取决于 p对应的数据类型 --- p对应的数据类型 ---指针类型 int*32位 系统 --- 对应地址大小 统一都是32位 --4个字节64位 系统 --- 对应地址大小 统一都是64位 --8个字节 //取决于你的cpu是多少位的系统示例eg:int a 10;int *p a; // a 取地址运算 表示把a的门牌号a存到指针变量p里面后期通过*p解引 用就可以直接顺着这个门牌号进去读出a中的数据对于a这块空间的使用1.直接通过a使用 --- 直接引用 // int a 10;2.间接引用 --- 指针的方式 // int *p a;对于间接引用指针的方式step1(找):首先通过p本身可以得到 a所在空间的地址 //通过p本身 只是 能找到astep2(用):能不能用a所在的空间?*运算数---- 指针运算符(解引用) ---运算数必须是地址*p运算过程://step1: 拿出p中地址编号到内存中寻找 //找//step2: 从定位处开始偏移出sizeof(基类型)大小的一块空间 //用//step3: 将偏移出的这块空间当做一个基类型变量来看*p 运算结果 相当于是一个 int型变量实现被调修改主调什么是被调 --- 被调函数 ---被调用函数什么是主调 --- 主动调用的函数被调修改主调规则1.要修改谁就传谁的地址2.在被调函数中一定要有相应的*p运算练习练习:实现两个数求和实现一个函数 一次性 得到 两个整数和和差练习:实现一个函数 找出两个数中最大值和最小值指针 操作 数组数组:整型 一维int a[10] {1,2,3,4,5,6,8,9,10}; //数组特点:1.连续性2.单一性 --类型一致3.有序性 --按顺序存放通过指针 操作 数组数组名能代表数组所在空间起始位置从值的的角度 --数组名代表数组首元素的地址---首元素地址也是整个数组起始地址int *p a; // 数组名代表数组首元素的地址 a[0]; // a[0] 是啥类型 --- 是int类型//a[0] 取了一个存放int型数据空间的地址 // int *指针操作数组1.因为数组的特点只需要知道首元素地址即可2.指针运算pN3.指针 * 运算pi 第i个元素的地址i可以是 0 1 2 ...*(pi) 第i个元素(变量) 等价于 a[i]a[i] *(pi)a[i] *(ai)例如17行中直接写a不需要a因为数组名代表数组首元素的地址字符串和数组都是如此18行printf使用%s时是从给定的内存首地址开始逐个打印字符直到 \0 结束因此用%s要的是地址不是值直接p就代表了地址不需要解引用*pp地址*p读的具体值补充1、printf中%p用于地址指针2、scanf括号内逗号后面是地址类型不一致若指针p与数a类型不一致则强制转换例int a 123;char *p (char *) a;(char *)强转特殊说明a[i] 也可以写成 i[a] 的形式指针运算p 1 //表示地址 加了 一个基类型大小p N //表示地址 加了 N个基类型大小p - 1 //表示地址 减了 一个基类型大小p - N //表示地址 减了 N个基类型大小p p --p-q //必须是同类型指针 表示 差了几个基类型关系运算: !p q //看地址编号编号大的 就大练习练习:通过指针的方式找出数组中最大值 //写成函数练习通过指针的方式 实现数组逆序