




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 指针指针 壹 内存分配表壹 内存分配表 计算机中的内存都是编址的 就像你家的地址一样 在程序编译或者运行的时候 系统 可以不关心具体 是什么 可能是编译器 也可能是操作系统 实际上是二者合作的结果 开辟了一张表 每遇到一次声明语 句 包括变量的声明 函数的声明和传入参数的声明等等 都会开辟一个内存空间 并在表中增加一行纪录 记载一些对应关系 DeclarationIDNameAddressLength int nP 1nP20002B char myChar 2myChar20021B int myPointer 3myPointer20032B char myPointer2 4myPointer220052B 贰 指针就是一个整数贰 指针就是一个整数 指针 是一个无符号整数 unsigned int 因不致歧义下简称 整数 它是一个以当前系统寻址范围 为取值范围的整数 32 位系统的寻址能力 地址空间 是 4GB 0 232 1 bytes 二进制表示长度为 32bit 也 就是 4B 不难验证 在 32 位系统里 int 类型也正好是 4B 32 bit 长度 可以取遍上述范围 同理 64 位 系统取值范围为 0 264 1 int 类型长度为 8B 例证就是程序 1 得到的答案和程序 2 的答案一致 不同机器可能需要调整一下 pT 的取值 程序 1程序 2 include main char pT char t h pT putchar pT include main char pT char t h pT char 1245048 putchar pT 程序 2 第 6 行加上 char 是因为毕竟 unsigned int 和 char 不是一回事 需要强制转换 否则会有 个警告 既然指针的实质是一个整数 为何不用 unsigned int 直接声明 或者统一用 int 声明 而要用不同的类 型后面加上一个 表示呢 char 声明过的类型 一次访问 1 个 sizeof char 长度 double 声明过的类型 一次访问 1 个 sizeof double 长度 在汇编里 没有数据类型这一概念 整数类型和指针就是一回事了 不论是整数还是指针 执行自增的时 候 都是将原值加一 如果上文声明 char pT 汇编语言中 pT 自增 INC 之后值为 1245049 可是 C 语言中 pT 之后 pT 值为 1245049 如果 32 位系统中 上文声明 int pT 汇编语言中 pT 自增之后值为 1245049 可 是 C 语言中 pT 之后 pT 值为 1245052 为什么 DOS 下面的 Turbo C 和 Windows 下的 VC 的 int 类型自增时的步进不一样长 因为 DOS 是 16 位的 Windows x86 是 32 位的 int 类型长度取决于操作系统的位长 可以预见 在 Windows x64 中编译 上文声明 2 int pT 在执行 pT 之后 pT 值为 1245056 那么 复杂的结构怎么分配空间呢 C 语言的结构体 汇编语言对应为 Record 类型 按顺序分配空间 int a 20 typedef struct st double val char c struct st next pst pst pT 10 在 32 位系统下 内存里面做如下分配 单位 H 16 进制 变量 2000200120022003200420052006 204C204D204E204F 地址 a 0 a 1 a 19 变量 20502051 205720582059205A205B205C205D205E205F 地址 pst val pst cpst next 无效无效无效 这就说明了为什么 sizeof pst 16 而不是 8 编译器把结构体的大小规定为结构体成员中大小最大的那个 类型的整数倍 至于 pT 的存储 可以依例推得 总长为 160 此不赘述 有个问题 如果执行 pT 答案是什么 是自增 16 还是 160 别忘了 pT 是常量 不能加减 所以 我们就可以声明 typedef struct BiTree int value struct BiTree LeftChild struct BiTree RightChild BTree 用一个整数 代表一棵树的结点 把它赋给某个结点的 LeftChild RightChild 值 就形成了上下级关系 只要无法找到一个路径 使得 A LC RC LC RC LC RC A A 泛指某一结点 这就构成了一棵二叉树 反之就成了图 叁 叁 C C 的按值传递的按值传递 C 中函数调用是按值传递的 传入参数在子函数中只是一个初值相等的副本 无法对传入参数作任何改动 但实际编程中 经常要改动传入参数的值 这一点我们可以用一个小技巧 即传入参数的地址而不是原参数本 身 当对传入参数 地址 取 运算时 就可以直接在内存中修改 从而改动原想作为传入参数的参数值 include void inc int val val main 5 int a 3 inc printf d a 在执行 inc 时 系统在内存分配表里增加了一行 inc 中的 val 其地址为新地址 值为 假设开辟空间时 p 被分配 3001H 3002H 两个位置 则 p 为 2003H p 为 3001H 字节序为小尾序 Little Endian 低位在低地址 Intel 的 x86 系列 CPU 适用 Motorola 的 PowerPC 系列则采用大尾序 Big Endian 高位在低地址 则上述 p 为 0320H p 需进一步查内存 0320H 处的存储值 p 的值为多少 p p 2003H 3000H 0300H 那么 main void fun int int a 3 fun inc fun printf d a 柒 几个问题柒 几个问题 下面是关于指针的几个思考题 在文中或许没有提及 然而读者可以自行上机实现之 1 声明一个指针之后 为什么要立即赋值为 NULL 如果不这么做 其初始值是多少 2 声明为 void 的指针 一次可以访问多大步长 为什么很多程序在需要传入缓存 Buffer 首地址的时 候都习惯在传入参数处声明为 void Buffer 3 很多人都说 C 语言是一种面向过程的语言 因为它最多只有 struct 的定义 而没有 class 的概念 看 完本篇后 你认为 C 语言能成为面向对象的语言吗 如果可以 请给出一个简单的表示 4 指针和引用只有表示上的差异 而无实质的区别 那么 Java C 等语言里没有指针的概念 你认为这 样的理解正确吗 如果不赞同 请举出什么情况下传入的参数实际上是其指针而不是副本 5 指针是一个指向内存地址的整数 如何用这个概念去理解 Windows 程序设计中的 HANDLE 句柄 RESOURCE 资源 和 MESSAGE 消息 7 C C 语言中的指针专题语言中的指针专题 一 数组的指针 指针数组以及指向指针的指针一 数组的指针 指针数组以及指向指针的指针 考虑数组的指针的时候我们要同时考虑类型和维数这两个属性 换一句话 就是说一个数组排除在其中存储 的数值 那么可以用类型和维数来位置表示他的种类 A 一维数组 在 c 和 c 中数组的指针就是数组的起始地址 也就第一个元素的地址 而且标准文档规定 数组名代表数组的地址 这是地址数值层面的数组表示 例如 int a 10 int p p 由于数组名代表数组的起始地址 所以 a 第一层 和第一个元素 a 0 0 地址的数字是相同的 但是意义却是不同的 对于该数组我们可以理解为 a 的一维数组 第一层 它有 四个元素 a 0 a 1 a 2 a 3 第二层 而每个元素又含有 6 个元素 a 0 0 a 0 1 a 0 2 a 0 3 a 0 4 a 0 5 第三层 到此我们终于访问到了每个元素了 这个过程我们经历了 a a 0 a 0 0 整体来讲 a 是一个 4 行 5 列的二维数组 a 表示它指向的数组的首地址 第一个元素地址 而不能是 int p 10 或者 char p 10 此时 p 是一个指针 数值上和 使用 pt 指向 t 那么这里我们用什么指向 int t 10 中的 t 呢 我们要使用一个指针的指针 int pt t 这是因为 在 int t 10 中 每个元素是指针 那么同时 t 又指向这个数组 数组上和 D 指针的指针 一个指针变量内部可以存储一个值 这个值是另外一个对象的地址 所以我们说一个指针变 量可以指向一个普通变量 同样这个指针变量也有一个地址 也就是说有一个东西可以指向这个指针变量 然 后再通过这个指针变量指向这个对象 那么如何来指向这个指针变量呢 由于指针变量本身已经是一个指针了 右值 那么我们这里就不能用一般的指针了 需要在指针上体现出来这些特点 我们需要定义指针的指针 二重指针 int p1 i int p2 p1 综合以上的所有点 下面是我们常常看到一些匹配 也是经常出错的地方 9 int a 3 b 2 3 c d 3 void fun1 int p void fun2 int p 3 void fun3 int p void fun4 int p 3 void fun5 int p void fun6 int p 2 3 void fun7 int p 3 函数 不会产生编译时刻的可能值 但逻辑上不一定都对 函数 不会 产生 编译 时刻 的可 能值 但 逻辑 上不 一定 都对 f u n 1 a 不能是 10 int p int I int j 这样就变成了返回指针的函数声明了 在 C 中处于对安全性的考虑 指针和它指向的对象要类型一致 也就说上面的指针所指向的函数的特性 要和它一模一样 例如指向 int min int I int j 是可以的 但是指向 int min double I double j 是不 可以 函数指针也和其他的指针一样 在使用的时候很怕发生 悬空 所以在使用的时候同样要判断有效性 或者在定义的时候就初始化 int p int I int j min int p int I int j min int p int I int j 0 B 函数的指针参数 函数指针可以作函数的参数 例如我们有一个积分的算法 对于不同的数学函数可以进 行积分 我们这里假设函数都是一元的 那么我们的算法接口可以定义为 templateT integrate T lower T upper T T 0 throw integrated exp 这里的最后的参数是一个函数的指针 并且被设定缺省值为 0 这个函数返回一个值 同时需要一个参数 假如加入我们有这样的一个函数 double line double x return a x b 那么我就可以使用了 函数指针还可以作为返回类型 注意不是函数 某个特定的函数是不可以作为返回类型的 假设 typedef int PF int PF getProcessMethod true C 返回指针的函数 一个函数的返回是函数的重要接口之一 c 的一个重要的强大的功能就是能够设计足 够复杂和好用的用户自定义类型 而同时处理和传递这些类型也是很麻烦的一件事情 我们不想把我们的时间 都花在这些对于我们的实际工作没有很实质帮助的拷贝上 解决这个问题就要依赖我们的接口设计 c 和 c 都 提供了相应的解决方案 在 c 中我们可是使用引用 讲他们作为函数的实际参数 或者我们在函数的实际参 数中使用一个指针等 同样我们还可以使用一个函数返回一个指针 但是这是一个很不好解决的问题 我们首 先容易出错的是 将一个局部变量的地址传出来 例如 UserType Process UserType ut param list process ut return ut 这个变量在我们的函数结束的时候就被销毁了 尽管地址可以传出去 但是这个地址已经不存在了 已经 不能使用的东西 在这个函数之外却不知道 难免要出错 同时我还会有一个比较麻烦的问题 使用 new 又 容易造成内存泄露 UserType Process UserTpye put new UserType param list process put return put 我们在函数内部使用了一个 new 分配了一个空间 这样传出来也是可以 就是说不会发生上面的问题了 但是用户通常都会忘记在程序的外面在把这个借来的空间还回去 内存空间就这样泄露了 可能也是这些另人 无奈的问题 所以很多程序员把函数的参数设定为指针或者引用 以此来代替这种向外传输吧 总之 使用这 种返回指针的函数要小心 三 类成员的指针 类成员和一般的外部变量相互比较 不同就是它所在的域不同 这个域很重要 它决定了该变量可以使用 的范围 那么一个指针如果要指向类的成员函数或者成员变量 那么除了要表达它的返回类型 参数列表或者 类型之外 那么还要说明它所指向的变量 或者函数 的域 为了说明该域我们要使用类域限定 11 class NJUPT static double money 20000000 int num public NJUPT num 10 int get return num double getMoney reuturn money 我们定义成员的指针为 int NJUPT p 指向 int 型成员变量 int NJUPt p 指向 int f 型成员函数 为了使用这些指针 我们需要使用该类型的变量或者指针 NJUPT s ps 那么调用的方式为 cout S P cout p 这个看起来似乎很奇怪 但是只要你想到我们定义的指针被限定在了类域中了 我们在开始定义的使用使 用了 NJUPT 这么使用也是很自然的 如果一个类还有一些静态成员变量和静态成员函数 那么我是 否也想这样使用呢 答案是不用 静态成员我们就可以象使用外部的普通成员一样定义一个指针或者函数指针 来访问就可以了 究其原因主要是这个成员的类型性质决定的 double p NJUPT money double p NJUPT getMoney C 语言数组与指针详解 2008 08 11 02 01 在 语言中 指针和数组有着紧密的联系 其原因在于凡是由数组下标完成的操作皆可用指针来实现 在数组 中我们已经知道 可以通过数组的下标唯一确定了某个数组元素在数组中的顺序和存储地址 这种访问方式也 称为 下标方式 例如 int a 5 1 2 3 4 5 x y x a 2 通过下标将数组 a 下标为 2 的第 3 个元素的值赋给 x x 3 y a 4 通过下标将数组 a 下标为 4 的第 5 个元素的值赋给 y y 5 由于每个数组元素相当于一个变量 因此指针变量既然可以指向一般的变量 同样也可以指向数组中的元素 也就是可以用 指针方式 访问数组中的元素 例 10 6 分析程序的运行过程和结果 include main int a 1 2 3 4 5 int x y p 指针变量 p p 指针 p 指向数组 a 的元素 a 0 等价于 p a x p 2 取指针 p 2 所指的内容 等价于 x a 2 y p 4 取指针 p 4 所指的内容 等价于 y a 4 printf p d x d y d n p x y 语句 p int p p a 指针 p 为数组的首地址 printf d p printf d n p 以下两个语句等价 printf d p printf d n p p 等价于 p p 3 printf d d n p a 3 运行结果 1 2 3 3 5 4 此例中指向数组 a 与指针变量 p 的指向变化情况见图 10 6 注意 第 2 个 printf 语句中的 p 是先使指针 p 自增加 再取指针 p 值作 运算 它的含义等 价于第 3 个 printf 语句中的 p 而 p 是先取指针 p 值作 运算 再使指针 p 自减减 用指针方式实现对数组的访问是很方便的 可以使源程序更紧凑 更清晰 10 3 2 指针基本运算 对于指针的运算有三种 指针与正整数的加减运算 两个指针的关系运算 以及两个指针的减法运算 1 指针与正整数的加减运算 当指针 p 指向数组中的元素时 n 为一个正整数 则表达式 p n 表示 指针 p 所指向当前元素之后的第 n 个元素 而表达式 p n 表示 指针 p 所指向当前元素之前的第 n 个元素 最常见的指针加减运算为 p 的含义是 指针加 指向数组中的下一个元素 p 的含义是 指针减 指向数组中的前一个元素 指针与整数进行加减运算后 它们的相对关系如图 10 7 所示 由于指针 p 所指的具体对象不同 所以对指针与整数进行加减运算时 C 语言会根据所指的不同对象计算出 不同的放大因子 以保证正确操作实际的运算对象 对于字符型 放大因子为 1 对于整型 放大因子为 2 对 于长整型 放大因子为 4 对于双精度浮点型 放大因子为 8 不同数据类型的放大因子等于一个该数据类型的 变量所占用的内存单元数 14 例 10 8 编程将 str1 复制到 str2 中 include include main char str1 80 str2 80 p1 p2 printf Enter string 1 gets str1 p1 str1 p2 str2 while p2 p1 0 指针 p1 的内容送到指针 p2 p1 p2 指针 p1 和 p2 分别向后移动 1 个字符 printf String 2 puts str2 程序中的关键是 while 语句 p2 p1 0 的含义是 先将指针 p1 的内容送到指针 p2 的内容中 即进行两个指针内容的赋值 然后再判断所赋值的字符是否是串结束标记 0 如果不是串结束标记 则执行 循环继续进行字符复制 如果是串结束标记 则退出循环 完成串复制 对于上面程序中的 while 循环 是可以进行优化的 优化后的循环可以如下 优化一 while p2 p1 p1 p2 优化二 while p2 p1 循环体为空 2 两个指针的关系运算 只有当两个指针指向同一个数组中的元素时 才能进行关系运算 当指针 p 和指针 q 指向同一数组中的元素时 则 pq 当 p 所指的元素在 q 所指的元素之后时 表达式的值为 1 反之为 0 p q 当 p 和 q 指向同一元素时 表达式的值为 1 反之为 0 p q 当 p 和 q 不指向同一元素时 表达式的值为 1 反之为 0 任何指针 p 与 NULL 进行 p NULL 或 p NULL 运算均有意义 p NULL 的含义是当指针 p 为空时成立 p NULL 的含义是当 p 不为空时成立 不允许两个指向不同数组的指针进行比较 因为这样的判断没有任何实际的意义 例 10 9 编写程序将一个字符串反向 include main char str 50 p s c printf Enter string gets str p s str 指针 p 和 s 指向 str while p p 找到串结束标记 0 p 指针回退一个字符 保证反向后的字符串有串结束 标记 0 指针 p 指向字符串中的最后一个字符 while s p 当串前面的指针 s 小于 串后面的指针 p 时 进行循环 c s 交换两个指针所指向的字符 15 s p 串前面的指针 s 向后 1 移动 p c 串后面的指针 p 向前 1 移动 puts str 3 两个指针的减法运算 只有当两个指针指向同一数组中的元素时 才能进行两个指针的减法运算 否则 没有意义 当两个指针指向同一数组中的元素时 p q 表示指针 p 和 q 所指对象之间的元素数量 利用这一意义 可 以求出一个字符串的长度 例 10 10 编写程序求字符串的长度 include main char str 50 p str printf Enter string gets str while p p 找到串结束标记 0 退出循环时 p 指向 0 printf String length s n p str 指向同一字符数组的两个指针进行减法运算 求出 串长 10 3 3 通过指针引用二维数组中的元素 在 C 语言中 二维数组是按行优先的规律转换为一维线性存放在内存中的 因此 可以通过指针访问二维 数组中的元素 如果有 int a M N 则将二维数组中的元素 a i j 转换为一维线性地址的一般公式是 线性地址 a i M j 其中 a 为数组的首地址 M 和 N 分别为二维数组行和列的元素个数 若有 int a 4 3 p p 则二维数组 a 的数据元素在内存中存储顺序及地址关系如图 10 8 所示 这里 a 表示二维数组的首地址 a 0 表示 0 行元素的起始地址 a 1 表示 1 行元素的起始地址 a 2 和 a 3 分别表示 2 行和 3 行元素的起始地址 数组元素 a i j 的存储地址是 int y m d scanf d d d printf d n day of year day tab y m d 实参为二维数组名 day of year day tab year month day int day tab 形式参数为指针 int year month day int i j i year 4 0 for j 1 j month j day day tab i 13 j day tab i 13 j 对二维数组中元素进行地址变换 return day 由于 语言对于二维数组中的元素在内存中是按行存放的 所以在函数 day of year 中要使用公式 day tab i 13 j 计算 main 函数的 day tab 中元素对应的地址 C C 语言中数组和指针之间的互操作语言中数组和指针之间的互操作 我曾说过 在 C 语言中只有一维的数组 这是我对数组的看法 而且数组元素可以是任何类型的数据 或对象 自然 也可以是另外的一个数组 因为数组也是一种数据类型 所以如果你坚持要说有多维数组 那也不是不可能的事情 我们只 要把一个数组赋值给另一个数组的元素就可以了 当然了 我们必须保证在程序编译期数组的大小是一个固定的常数 其实 数组的操作很简单的 只要我们确定一个数组的大小和指向该数组下标为 0 的元素的指针 其他的任何一个数组下 标的运算都等同于一个对应的指针运算 所以我们说 数组和指针是可以相互操作的 两者的本质是一样的 甚至我们还可 以把数组看作是一个 指针 的集合 我可以通过如下的方式声明一个数组 char name 10 这个语句声明了 name 是一个拥有 10 个字符型元素的数组 类似的 struct student int tid 4 char name 10 char sex char address 25 std 100 17 这里声明了 std 是一个拥有 100 个元素的数组 而且 std 中的每一个元素都定义了一名学生的基本信息 每一个元素都是 一个结构 其中包括一个拥有 4 个整形元素的数组 tid 4 用来记录学生的学好 还有一个拥有 10 个字符型元素的数组 n ame 10 用来记录学生的名字 一个用来记录学生性别的字符 sex 还有一个记录学生住址 拥有 25 个字符型元素的数 组 address 25 数组是一个很灵活的结构 所谓的 二维数组 或 矩阵 是很容易声明的 例如 int week 7 24 这里把声明 week 声明为一个拥有 7 个数组元素的数组 这样解释 不会感觉奇观吧 其中每一个元素都是拥有 24 个整 数型元素的数组 注意了不能把 week 理解为一个拥有 24 个数组元素的数组 其中每一个元素是一个拥有 7 个整形元素的数组 还有 如果 week 不是用于 sizeof 的操作数 那么它总是被一个指向 week 数组起始地址的指针 这里又和指针磨合了 如果 一个指向的是一个数组的一个元素 那么我们只需给这个指针加上一个自然数 i 0 i 数组的上边界的值 那么就可以得到 一个指向该数组的弟 i 个元素的指针 如果在此基础上减去 1 那么就得到了一个指向前一个元素的指针 这样的操作很简单 很灵活的 但是这儿也有一个误区 好多人都认为 给一个指针加一个整数 就等同于给该指针的二进制数表示加上一个同样 的整数 其实 这是一个很容易犯的错误了 至少在初学 C 语言的时候 我就犯过这个错误 而且不仅一次 其实 这两者 的含义是截然不同的 假设我们有一个这样的指针声明语句 int p 那么 p 自然是一个指向整数指针了 那么 p 1 指向的是计算机内存的下一个整数 而不是指向指向地址的下一个内存位置 也就是说程序的逻辑地址一般都不同于实际的物理地址 如果有两个指向同一个数组的元素 那么我们可以通过这两个指针之间的算术运算得到一些有意义的表达式 比如 int pointer int ip pointer i 那么我们可以通过指 ip pointer 得到 i 的值 如果 ip 和 ponter 指向的不是同一个元素 那么我们就无法保证这个操作的 正确性 虽然他们在内存地址上相差一个整数倍 让我们通过下面的一个例子来看看数组和指针操作的等效性和灵活度 如果我们在程序中声明了以下两个语句 int a 12 int p 那么我们可以对数组和指针进行相应的操作了 1 p a 17 因为 a a 0 所以这里就有 p a 0 了 即 p 和 a 都指向数组的第一个元素 2 p p 1 这也是正确的 它等效于 p a 1 3 p 这个语句等效于 p a 2 还有 p 这样的语句 ANSI C 中是错误的 这一点在前一篇文章我已经声明过 因为这两个操作数的类型很显然是不匹配的 即 也许你会说很显然是正确的 因为它特别象一个两元加法运算 虽然答案的前一半是正确的 但是问题的实质可不是这样 的 为了回答之一个问题我们需要从数组元素的引用说起 在前面我们声明了 a 为一个拥有 12 个整型元素的数组 而且我们知道 a 是一个指向该数组的第一个 0 位元素 元素的指 针 所以按照指针的性质我们可以知道 a 就是对数组的第一个元素的引用 你可以通过如下的方式给数组的第一个元素赋值 a 2005 明白了这一点 那么其他元素的赋值和引用也是类似的 a 3 是对数组的弟 3 个元素的引用 而其赋值可以是 a 3 2006 然而 由加法的交换律 可以知道 1 a a 1 所以 a i i a 因为 a i i a 现在让我们想一想如何用指针来操作我们的二维数组吧 前面我们声明了一个二维数组 week 那么 week 2 代表什么意思呢 我想如果明白了前面的讲解 那么这个问题就一如反掌 17 了 week 2 代表的无非就是 week 数组的弟 3 个元素 数组下标从 0 开始 即一个拥有 24 个整型元素的数组 如果你还想知 道 week 2 的内存大小 那么你可以通过 sizeof 操作来实现 int mem mem sizeof week
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年4月北京门头沟龙泉镇城市协管员招聘1人考前自测高频考点模拟试题及答案详解(易错题)
- 2025昆明市第三人民医院重症医学科见习护理人员招聘(7人)模拟试卷及完整答案详解1套
- 2025春季河南新乡工商职业学院招聘考前自测高频考点模拟试题及答案详解1套
- 2025年中职高考对口升学(理论考试)真题卷【旅游大类】模拟练习
- 2025河南郑州市中华保险招聘模拟试卷及答案详解参考
- 2025辽宁抚顺高新热电有限责任公司招聘专业技术人员18人考前自测高频考点模拟试题及答案详解参考
- 安全培训效果评语课件
- 2025年山东第一医科大学附属省立医院(山东省立医院)公开招聘部分紧缺岗位聘用制工作人员(58人)模拟试卷及一套完整答案详解
- 2025广东阳春市高校毕业生就业见习招募31人(第三期)模拟试卷及答案详解(必刷)
- 安全培训效果考核课件
- 核桃肽粉生产技术规程(征求意见稿)编制说明
- 《储能技术》课件-3.各种类型的蓄能技术
- (2025)企业首席质量官培训考核试题(附含答案)
- 农业现代化种植技术培训课件
- 中城汽车(山东)有限公司审计报告
- 锂电池pack工厂安全培训课件
- 大学博士竞赛试题及答案
- 钢结构彩钢瓦施工工艺与技术交底
- 2025版煤矿安全规程宣贯培训课件
- 梁启超家教家风课件
- 第5课 我们说方言教学设计-2025-2026学年小学地方、校本课程浙教版(2024)人·自然·社会
评论
0/150
提交评论