ch2
合集下载
CH2饱和烃(烷烃)

CH3 CH2 CH2 CH2 CH3 Pentane (C5H12)
CH3 CH2 CH2 CH2 CH2 CH2 CH2 CH2 CH2 CH3 Decane (C10H22)
同分异构现象
同分异构:分子式相同而结构不同, 如正丁烷 与异丁烷; 构造异构:constitutional isomers; 有机化合物的异构:构造异构和立体异构; 碳链异构: 有机化合物的直链和支链的异构, 为有机化合物异构现象多样形式之一. 同分异构体:具有相同分子式的不同化合物;
最简单的烷烃: 甲烷(CH4, methane), 两碳的 为乙烷(C2H6, ethane); 碳原子数目增加可以形成一系列化合物烷烃通 式: CnH2n+2. 同系列(homologous series): 结构相似, 组成 相差CH2或其整数倍的化合物组成的一系列. 同系物(homolog, homologue): 同系列中的各化 合物。
二 有机化合物的命名(Nomenclature of Organic Compounds): (1)普通命名法
1碳的烷烃,词头用:甲、乙、丙、丁、戊、己、庚、 辛、壬、癸;10个碳以上,用数字十一、十二等表示。 正(直链)、异(碳链一端第二碳上有甲基)、新(具有叔丁 基)
CH3 CH3CH2CH2CH2CH2CH3 CH3CHCH2CH2CH3 CH3 CH3CCH2CH3 CH3
从丙烷(propane)导出丁烷(butane)
H H H H C H H C H H2 C H C H H H H C H H C H C H C H H H H3C CH CH3 CH3 C H H C H H C H H C H H H3C H2 C C H2 CH3
丁烷(正丁烷)
Ch2理化性质与结构参数

24
3.126
28
3.121
26
3.061
30
2.941
第25页/共31页
25
3. 分子连接性指数的计算
Kier等为使相似化合物之间的拓扑参数有最大的 区分度,定义: 分子连接性指数= ∑(δi δj )-1/2
零阶项: 0X= ∑(δi )-1/2 一阶项: 1X= ∑(δi δ j )-1/2 二阶项: 2X= ∑(δi δ j δ k )-1/2 三阶项: 3X= ∑(δi δ j δ k δ l)-1/2 ………., i,j,k,… 分子中依次排列的各碳原子.
本章目录
2.1 引 论 2.2 活性/性能数据 2.3 经典结构参数 2.4 量子化学参数 2.5 分子链接性指数
第1页/共31页
1
2.1 引 论
化合物的性质取决于化合物的结化合物的结构 为图,是非数学量,要建立这种相关性,则需要由 结构图提取特征,并运用这些特征(作为自变量) 去构造数学模型,进而预测预报未知化合物。
4
EHOMO, ELOMO,ET,ΔfH;
量
QA,ρFMO;
子
分子静电势,键级,电离能,电子亲和势
化
几何参数
学
参
分子形状参数:
数
分子体积,分子表面积,溶剂可及性
其他:
分子极化率,偶极矩与极化度
第17页/共31页
17
2.5
分子连接性指数
第18页/共31页
18
一. 分子拓扑与拓扑指数
2
分子拓扑是分子空间结构的图形描述。可以把分子
结
取代基疏水性参数
构
参
x log(PRX / PRH )
ch2矿床地下开采基本概念

采 单
阶段高度变化范围很大。
元
对于缓倾斜矿体,阶段高度通常小于20~30m;急
划 分
倾斜矿体,阶段高度通常为50~60m,个别也有达到
及 80~120m左右的。但是,对于不同的采矿方法,则所需
开 采
求的阶段高度是不同的
顺 (阶段高度如下图中的h)。
序
19.10.2019
矿物资源工程专业主干课程
4
开 采 单 元 划 分 及 开 采 顺 序
10
三、盘区和采区
3.当开采缓倾斜矿床时,可有两种情况
开 ① 当矿体厚度不大时,采区可沿走向布置; 采 单 ② 当矿体厚度很大时,采区可沿垂直走向布置; 元 划 分 及 开 采 顺 序
19.10.2019
矿物资源工程专业主干课程
11
四、开采单元划分
非煤矿床开采单元划分(井田再划分)的方式视
矿体倾角大小而定,主要有以下两种:
量 联络边等。
19.10.2019
矿物资源工程专业主干课程
24
矿 床 开 采 步 骤 和 三 级 矿 量
19.10.2019
矿物资源工程专业主干课程
ቤተ መጻሕፍቲ ባይዱ
25
(4)采准系数及采准比
①采准系数(K1)
矿 K1是指矿块内每采出一千吨矿石总量所需要掘进的采 床 准巷道和切割巷道的长度。单位m/kt。
开 ②采准工作比重(K2)
序 Ⅰ—开拓盘区;Ⅱ—采准盘区;Ⅲ—回采盘区;1—主井;2—副
井;3—主要运输巷道;4—盘区运输道;5—采区运输巷道;6—
19.10.2019
采区;7—切割巷道
矿物资源工程专业主干课程
8
三、盘区和采区
CH2核酸的结构与功能,2h

DNA染色质的电镜图像
DNA染色质呈现出的串珠样结构。 染 色 质 的 基 本 单 位 是 核 小 体
(nucleosome)。
核小体的组成 核小体:是真核生物染色体的基本结构单元。
DNA:约200bp 组蛋白:H1
H2A,H2B H3 H4
核心颗粒 核小体
连接区
核小体串珠样的结构
碱基堆积作用力
(三)DNA双螺旋结构的多样性
Z
二、DNA的三级结构是超螺旋结构
超螺旋结构(superhelix 或supercoil) DNA双螺旋链再盘绕即形成超螺旋结构。
正超螺旋(positive supercoil) 盘绕方向与DNA双螺旋方同相同。
负超螺旋(negative supercoil) 盘绕方向与DNA双螺旋方向相反。
H4 DNA双链 H1
H3 核小体连接区
5.5 nm
11 nm
核小体核心颗粒
真核生物的染色体
800010000倍
三、DNA是遗传信息的物质基础
DNA的基本功能是以基因的形式负载遗传 信息,并作为基因复制和转录的模板。它 是生命遗传的物质基础,也是个体生命活 动的信息基础。
基因从结构上定义,是指DNA分子中的特 定区段,其中的核苷酸排列顺序决定了基 因的功能。
型。
(二) DNA双螺旋结构模型要点(B型)
1. DNA是反向平行、右手螺旋的双链结构
两条多聚核苷酸链在空间的走向呈反向平行 (anti-parallel)。两条链围绕着同一个螺旋轴形 成 右 手 螺 旋 (right-handed) 的 结 构 。 双 螺 旋 结 构的直径为2nm,螺距为3. 4nm。
OH
5O
Ch2 土壤有机质

胡敏酸和富里酸是土壤腐殖质的主要部分, 胡敏酸和富里酸是土壤腐殖质的主要部分,胡敏素是与土壤 矿物颗粒紧密结合而不能被稀碱液所提取的腐殖酸, 矿物颗粒紧密结合而不能被稀碱液所提取的腐殖酸,由于与 土壤颗粒结合牢固,对土壤性质和土壤肥力影响不大。 土壤颗粒结合牢固,对土壤性质和土壤肥力影响不大。
• 腐殖质存在形态
(四)促进微生物的生命活动 土壤有机质能为微生物生活提供能量和养分, 土壤有机质能为微生物生活提供能量和养分, 同时又能调节土壤水、气热及酸碱状况。 同时又能调节土壤水、气热及酸碱状况。 (五)促进植物的生理活性 1)植物体内糖代谢,提高渗透压,抗旱性。 )植物体内糖代谢,提高渗透压,抗旱性。 2)提高过氧化氢的活性,加速种子发芽和养分吸 )提高过氧化氢的活性, 收。 3)加强作物呼吸作用,增加膜的透性,提高其对 )加强作物呼吸作用,增加膜的透性, 养分的吸收,增强根系的发育。 养分的吸收,增强根系的发育。
2.2.4 土壤腐殖质
• 腐植酸(主要部分)及其盐类
胡敏酸
碱可溶, 碱可溶,水、酸不溶,颜色和分 酸不溶, 子量中等组分。 子量中等组分。
腐殖质
富里酸
水、酸、碱都可溶,颜色最浅, 碱都可溶,颜色最浅, 分子量最低组分。 分子量最低组分。
胡敏素
水、酸、碱都不溶,颜色最深, 碱都不溶,颜色最深, 分子量最高的组分。 分子量最高的组分。
本节重点
1. 土壤有机质来源和组成。 2. 腐殖质概念和特性。 3. 土壤有机质的转化过程和影响因素。 4. 试述土壤腐殖酸的分离过程。 5. 有机质对土壤肥力有哪些贡献? 6. 生产实践中采用哪些措施提高土壤的有机质?
三、 提高土壤有机质的途径
1 施用有机肥
主要的有机肥源包括: 主要的有机肥源包括: 绿肥、粪肥、厩肥、堆肥、沤肥、饼肥、 绿肥、粪肥、厩肥、堆肥、沤肥、饼肥、蚕 鱼肥、河泥、塘泥、 沙、鱼肥、河泥、塘泥、 有机、 有机、无机肥料配合施用
CH2 物理层

若识别不正确,则产生误码。 在调制解调器中还要有差错检测和纠正的设施。
课件制作人:谢希仁
几种最基本的调制方法
调制就是进行波形变换(频谱变换)。 最基本的二元制调制方法有以下几种:
调幅(AM):载波的振幅随基带数字信号而变化。 调频(FM):载波的频率随基带数字信号而变化。 调相(PM) :载波的初始相位随基带数字信号而 变化。
不能通过
0
能通过 W (Hz)
不能通过
频率(Hz)
每赫带宽的理想低通信道的最高码元传 输速率是每秒 1 个码元。
课件制作人:谢希仁
要强调以下两点
实际的信道所能传输的最高码元速率, 要明显地低于奈氏准则给出上限数值。 波特(Baud)和比特(bit)是两个不同的概念。
波特是码元传输的速率单位(每秒传多少个 码元)。码元传输速率也称为调制速率、波 形速率或符号速率。 比特是信息量的单位。传输速率“比特/秒”与码元的传 输速率“波特”在数量上却有一定的关 系。 若 1 个码元只携带 1 bit 的信息量,则 “比特/秒”和“波特”在数值上相等。 若 1 个码元携带 n bit 的信息量,则 M Baud 的码元传输速率所对应的信息传 输速率为 M × n b/s。
课件制作人:谢希仁
2.4.3 数字传输系统
现在的数字传输系统均采用脉码调制 PCM (Pulse Code Modulation)体制。
信号
采样周期 T
产生量化噪声
课件制作人:谢希仁
产生量化噪声的地方(续)
(经过 A/D 变化的地方)
使用 V.90 调制解调器(56 kb/s)
仅在此处 产生量化噪声 用户环路 模拟信号 A D/A 交换机 A/D 2/4 V.90 56 kb/s 调制解调器 A/D 数字信号 V.90 56 kb/s 调制解调器 仅在此处 产生量化噪声 因特网服务提供者 至因特网 (数字信号)
课件制作人:谢希仁
几种最基本的调制方法
调制就是进行波形变换(频谱变换)。 最基本的二元制调制方法有以下几种:
调幅(AM):载波的振幅随基带数字信号而变化。 调频(FM):载波的频率随基带数字信号而变化。 调相(PM) :载波的初始相位随基带数字信号而 变化。
不能通过
0
能通过 W (Hz)
不能通过
频率(Hz)
每赫带宽的理想低通信道的最高码元传 输速率是每秒 1 个码元。
课件制作人:谢希仁
要强调以下两点
实际的信道所能传输的最高码元速率, 要明显地低于奈氏准则给出上限数值。 波特(Baud)和比特(bit)是两个不同的概念。
波特是码元传输的速率单位(每秒传多少个 码元)。码元传输速率也称为调制速率、波 形速率或符号速率。 比特是信息量的单位。传输速率“比特/秒”与码元的传 输速率“波特”在数量上却有一定的关 系。 若 1 个码元只携带 1 bit 的信息量,则 “比特/秒”和“波特”在数值上相等。 若 1 个码元携带 n bit 的信息量,则 M Baud 的码元传输速率所对应的信息传 输速率为 M × n b/s。
课件制作人:谢希仁
2.4.3 数字传输系统
现在的数字传输系统均采用脉码调制 PCM (Pulse Code Modulation)体制。
信号
采样周期 T
产生量化噪声
课件制作人:谢希仁
产生量化噪声的地方(续)
(经过 A/D 变化的地方)
使用 V.90 调制解调器(56 kb/s)
仅在此处 产生量化噪声 用户环路 模拟信号 A D/A 交换机 A/D 2/4 V.90 56 kb/s 调制解调器 A/D 数字信号 V.90 56 kb/s 调制解调器 仅在此处 产生量化噪声 因特网服务提供者 至因特网 (数字信号)
CH2-商品分类与编码

发票
项目的GTIN和全部重量 (100.3kg)及每kg的价格
97612345000049 100.3kg×价格/kg
2. 系列货物包装箱代码(SSCC)
SSCC的数据结构
应用标 识符
00
系列货运包装箱代码 扩展位
N1
厂商识别代码
N2 N3 N4 N5 N6 N7
系列参考代码
N8 N9 N10 N11 N12 N13N14 N15 N16 N17
1.
2. 3.
目的:识别、输入、存储、处理——管理商品的目的
对象:特定商品 内容:符号,数字
4.
信息——分类信息;标识信息
• 商品代码的类型
1. 按照所表示信息内容的不同:商品分类代码;商品标识代码
2.
按照符号组成不同:全数字型、全字母型、数字-字母混合型
商品代码是如何编制的?即如何编码的?
• 商品编码
非零售商品标识代码
• 零售商品标识代码
1. EAN/UCC—13代码 • EAN/UCC—13代码由13位数字组成,该代码有两种结构形式,每 种代码结构分为三个层次
EAN/UCC-13数据结构 结构 结构一 结构二 厂商识别代码(含前缀码) N1 N2 N3 N4 N5 N6 N7 N1 N2 N3 N4 N5 N6 N7 N8 商品项目代码 N8 N9 N10 N11 N12 N9 N10 N11 N12 校验码 N13 N13
校验码 N12 N8
• 只有当商品出口到北美地区并且客户指定时,才申请使用UPC条码, 申请需经国家物品编码中心统一办理
• 非零售商品标识代码
1. EAN/UCC—14代码
EAN/UCC-14数据结构
指示符
ch2ch2与cl2取代反应方程式

ch2ch2与cl2取代反应方程式摘要:1.引言:介绍氯气和乙炔的反应2.反应方程式:列出氯气和乙炔的取代反应方程式3.反应机理:解释氯气和乙炔的取代反应机理4.结论:总结氯气和乙炔的取代反应正文:1.引言氯气(Cl2)和乙炔(CH≡CH)之间的取代反应是一种常见的化学反应。
这种反应能够生成1,2-二氯乙烷(ClCH2CH2Cl)和氢氯酸(HCl)。
乙炔是一种含有三个碳原子的炔烃,氯气是一种常用的卤素。
在这篇文章中,我们将详细讨论氯气和乙炔的取代反应方程式以及反应机理。
2.反应方程式氯气和乙炔的取代反应可以表示为以下化学方程式:CH≡CH + Cl2 → ClCH2CH2Cl在这个反应中,乙炔的一个氢原子被氯原子取代,生成1,2-二氯乙烷。
同时,另一个氢原子和氯原子结合生成氢氯酸。
3.反应机理氯气和乙炔的取代反应可以通过以下步骤进行解释:首先,氯气在反应中发生离解,生成两个氯原子(Cl.)。
这是因为氯气分子中的两个氯原子之间的键能相对较弱,容易断裂。
Cl2 → 2Cl.接下来,乙炔与氯原子发生加成反应,生成1,2-二氯乙烷和氢氯酸:CH≡CH + Cl.→ ClCH2CH2ClCH≡CH + HCl → CH3CH2HCl最后,生成的1,2-二氯乙烷和氢氯酸在反应条件下进一步反应,生成最终产物:ClCH2CH2Cl + Cl2 → Cl2CH2CH2Cl2CH3CH2HCl + Cl2 → CH3CH2Cl24.结论总之,氯气和乙炔的取代反应是一种生成1,2-二氯乙烷和氢氯酸的化学反应。
这个反应可以通过列出的方程式和解释的机理进行描述。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
– 用法1:delete p; – 用法2:delete [ ]p;
2.4.5 new 和delete
4、【例2-4】 用new和delete分配与释放堆内存。
//Eg2-4.cpp #include <iostream.h> void main(){ int *p1,*p2,*p3; p1=new int; //分配一个能够存放int类型数据的内存区域 p2=new int(10); //分配一个int类型大小的内存区域,并将10存入其中 p3=new int[10]; //分配能够存放10个整数的数组区域 *p1=5; *p3=1; p3[1]=2; //访问指向数组的数组元素 p3[2]=3; cout<<"p1 address: "<<p1<<" value: "<<*p1<<endl; cout<<"p2 address: "<<p2<<" value: "<<*p2<<endl; cout<<"p3[0] address: "<<p3<<" value: "<<*p3<<endl; cout<<"p3[1] address: "<<&p3[1]<<" value: "<<p3[1]<<endl; delete p1; //释放p1指向的内存 delete p2; delete p3; //错误,只释放了p3指向数组的第1个元素 delete []p3; //释放p3指向的数组 }
错误
2.4.4 void指针
1、指针与地址
每个指针都是一个内存地址,但都有一个相关的类型指示编译 器怎样解释它所指定内存区域的内容,以及该内存区域应 该跨越多少个内存单元。相同类型的指针进行比较或相互 赋值才有意义。
2、void *指针
– void*指针只表示与它相关的值是个地址,但该地址的数据 类型是未知的。它是能够接受任何数据类型的特殊指针。 void*最重要的用途是作为函数的参数,向函数传递一个类 型可变的对象。另一种用途就是从函数返回一个无类型的 对象,在使用时再将它显式转换成适当的类型。
pc=0; pA=0; f=0;
– 0与NULL
2.4.3 指针与const
1、指针与const的限定关系
p
? &c ? ? ? *p ? ‘a’ ?
P为常量,即此内存的 值不能修改
*P为常量,即此内存的 值不能修改
Int const *p =&c
const char *p =&c
2.4.3 指针与const
1、C数据类型在C++中继续可用 2、C++对C的结构、枚举、联合进行了扩展 C:结构名不是类型 struct {……} some_struct; struct some_struct struct_var; typedef struct some_struct struct_type; – C++:结构名、联合名为类型 struct {……} struct_name; struct_t struct_var; – union – enum
2.4 指针
• 本节主要介绍C++的指针及 C++动态内存分配运算符和 回收运算符new、delete • 指针与常量之间的关系,及 0指针和void指针
2.4.1 指针概念的回顾
1、C++内存分配
– 静态分配(静态变量)
• 编译器在处理源代码时为变量分配内存,其效率较高,但 缺少灵活性(要求程序执行之前就知道变量所需的内存类 型和数量)
第2章 C++ 基 础
本章主要介绍 C++对C语言的某些改变和扩展, 是非向向对象方面的特征,包括:
C++的数据类型 类型转换 const常量、引用、指针及函数参数 函数原型、默认参数、函数重载 内联函数 名字空间及其应用 变量作用域和生存期 数据输入/输出
2.1 C++对C语言数据类型的扩展
2、动态内存分配---指针
– 对类型T,T*是“到T的指针”,即一个类 型为T*的变量,能存一个类型T的对象的地 址 char c; c=„a‟; char p* p c p=&c; ? &c ? ? ? ‘a’ ? ?
内存 *P
2.4.1 指针概念的回顾
– 指针是一个复杂的概念,它能够指向(保存) 不同类型变量的内存地址。例如:
int *pi; // pi是指向int的指针 int **pc; // pc是指向int指针的指针 int *pA[10]; // pA是指向int的指针数组 int (*f)(int,char); // f是指向具有两个参数的函数的指针 int *f(int) // f是一个函数,返回一个指向int的指针
free (ip);
2.4.5 new 和delete
3、C++动态内存分可由new,delete运算符完成 • New用于从内存中分配指定大小的内存 – 用法1:p=new type; – 用法2:p=new type(x); – 用法3:p=new type[n];
• delete用于释放new分配的堆内存
2.4.3 指针与const
const对象的地址只能赋值给指向const对象的 指针,但是指向const对象的指针却可以被赋 于一个非const对象的地址。
const double minWage=9.60; const double *ptr=&minWage; double dval=3.14; ptr=&dval; *ptr=23; dval=23;
2.4.3 指针与const
6、const、指针与变量赋值 一般编译器不能跟踪指针在程序中任意 一点所指向的对象,任何一个“企图将 一个非const对象的指针指向一个常量 对象”的动作都将引起编译错误。
const double minWage=9.60; double *ptr=&minWage;
2.2 局部变量说明
• C局部变量的定义
– 在语句块内可执行语句之前
• C++局部变量的定义
– 可在语句块内任何语句可以出现的地方 – 但不能被goto及类似语句跳过
• 好处
– 方便:使用时才定义 – 易读:类型信息就近获取
2.3 const常量
• 1、常量定义
–C
• #define 常量名称 常量 常量在定义 时就必须初 始化
– 静态分配(静态变量)
• 编译器在处理源代码时为变量分配内存,其效率较高,但 缺少灵活性(要求程序执行之前就知道变量所需的内存类 型和数量)
– 动态分配(动态变量)
• 程序执行时调用运行时刻库函数来分配变量的内存。
– 两者的区别
• 静态变量是有名字的变量,可以通过名字对它所代表的内 存进行操作;动态变量是没有名字的内存变量,只能通过 指针进行操作。 • 静态变量的分配和释放由编译器自动处理,动态变量的分 配与释放必须由程序员控制。
2、限制变量、参数的访问,避免非本意的数据修改举例 icp是一个常 #include<iostream.h> 量地址,此处 main(){ 企图修改它 int i, j;
const int ic = 100; const int * ip = & ic; int * const icp = & i; //icp = &j; //err *icp = 200; cout<<"i="<<i<<endl; cout<<"j="<<j<<endl; cout<<"*ip="<<*ip<<endl; cout<<"*icp="<<*icp<<endl; }
–
2.4.5 new 和delete
1、动态存储管理的概念 系统为每个程序提供了一个在程序执行时可用 的内存空间,这个内存空间被称为空闲存储区 或堆(heap),运行时刻的内存分配就称为动 态内存分配。 2、在C语言中,动态内存分配用mallc和free函数 完成
int * ip = (int*) malloc (sizeof (int) * 100);
2.4.3 指针与const
– 例题:限制函数修改参数 //eg.cpp
#include <iostream.h> void mystrcpy(char * Dest,const char *Src) { while(*Dest++=*Src++); } void main(){ char a[20]="How are you!"; char b[20]; mystrcpy(b,a); cout<<b<<endl; }
2.4.3 指针与const
4、指针常量
– 在指针定义语句的指针名前加const,表示指针本身是 常量。例如:
char * const pc=“aaaa”;//定义指针常量 ,在定义时必须初始化 pc=“bbbb”; //error,指针常量不能改变其指针值 *pc=“a //err,所指的内容可改 *pc=„a‟; //ok *(pc+1)=„b‟; //ok, pc++=„y‟; //error const int b=28; int * const pi=&b; //error,pi不能变,但它所指的内存单 却可以改变,此处却将它指向了一个不可变的内存单元,即: //不能将const in * 转换成int *
2.4.5 new 和delete
4、【例2-4】 用new和delete分配与释放堆内存。
//Eg2-4.cpp #include <iostream.h> void main(){ int *p1,*p2,*p3; p1=new int; //分配一个能够存放int类型数据的内存区域 p2=new int(10); //分配一个int类型大小的内存区域,并将10存入其中 p3=new int[10]; //分配能够存放10个整数的数组区域 *p1=5; *p3=1; p3[1]=2; //访问指向数组的数组元素 p3[2]=3; cout<<"p1 address: "<<p1<<" value: "<<*p1<<endl; cout<<"p2 address: "<<p2<<" value: "<<*p2<<endl; cout<<"p3[0] address: "<<p3<<" value: "<<*p3<<endl; cout<<"p3[1] address: "<<&p3[1]<<" value: "<<p3[1]<<endl; delete p1; //释放p1指向的内存 delete p2; delete p3; //错误,只释放了p3指向数组的第1个元素 delete []p3; //释放p3指向的数组 }
错误
2.4.4 void指针
1、指针与地址
每个指针都是一个内存地址,但都有一个相关的类型指示编译 器怎样解释它所指定内存区域的内容,以及该内存区域应 该跨越多少个内存单元。相同类型的指针进行比较或相互 赋值才有意义。
2、void *指针
– void*指针只表示与它相关的值是个地址,但该地址的数据 类型是未知的。它是能够接受任何数据类型的特殊指针。 void*最重要的用途是作为函数的参数,向函数传递一个类 型可变的对象。另一种用途就是从函数返回一个无类型的 对象,在使用时再将它显式转换成适当的类型。
pc=0; pA=0; f=0;
– 0与NULL
2.4.3 指针与const
1、指针与const的限定关系
p
? &c ? ? ? *p ? ‘a’ ?
P为常量,即此内存的 值不能修改
*P为常量,即此内存的 值不能修改
Int const *p =&c
const char *p =&c
2.4.3 指针与const
1、C数据类型在C++中继续可用 2、C++对C的结构、枚举、联合进行了扩展 C:结构名不是类型 struct {……} some_struct; struct some_struct struct_var; typedef struct some_struct struct_type; – C++:结构名、联合名为类型 struct {……} struct_name; struct_t struct_var; – union – enum
2.4 指针
• 本节主要介绍C++的指针及 C++动态内存分配运算符和 回收运算符new、delete • 指针与常量之间的关系,及 0指针和void指针
2.4.1 指针概念的回顾
1、C++内存分配
– 静态分配(静态变量)
• 编译器在处理源代码时为变量分配内存,其效率较高,但 缺少灵活性(要求程序执行之前就知道变量所需的内存类 型和数量)
第2章 C++ 基 础
本章主要介绍 C++对C语言的某些改变和扩展, 是非向向对象方面的特征,包括:
C++的数据类型 类型转换 const常量、引用、指针及函数参数 函数原型、默认参数、函数重载 内联函数 名字空间及其应用 变量作用域和生存期 数据输入/输出
2.1 C++对C语言数据类型的扩展
2、动态内存分配---指针
– 对类型T,T*是“到T的指针”,即一个类 型为T*的变量,能存一个类型T的对象的地 址 char c; c=„a‟; char p* p c p=&c; ? &c ? ? ? ‘a’ ? ?
内存 *P
2.4.1 指针概念的回顾
– 指针是一个复杂的概念,它能够指向(保存) 不同类型变量的内存地址。例如:
int *pi; // pi是指向int的指针 int **pc; // pc是指向int指针的指针 int *pA[10]; // pA是指向int的指针数组 int (*f)(int,char); // f是指向具有两个参数的函数的指针 int *f(int) // f是一个函数,返回一个指向int的指针
free (ip);
2.4.5 new 和delete
3、C++动态内存分可由new,delete运算符完成 • New用于从内存中分配指定大小的内存 – 用法1:p=new type; – 用法2:p=new type(x); – 用法3:p=new type[n];
• delete用于释放new分配的堆内存
2.4.3 指针与const
const对象的地址只能赋值给指向const对象的 指针,但是指向const对象的指针却可以被赋 于一个非const对象的地址。
const double minWage=9.60; const double *ptr=&minWage; double dval=3.14; ptr=&dval; *ptr=23; dval=23;
2.4.3 指针与const
6、const、指针与变量赋值 一般编译器不能跟踪指针在程序中任意 一点所指向的对象,任何一个“企图将 一个非const对象的指针指向一个常量 对象”的动作都将引起编译错误。
const double minWage=9.60; double *ptr=&minWage;
2.2 局部变量说明
• C局部变量的定义
– 在语句块内可执行语句之前
• C++局部变量的定义
– 可在语句块内任何语句可以出现的地方 – 但不能被goto及类似语句跳过
• 好处
– 方便:使用时才定义 – 易读:类型信息就近获取
2.3 const常量
• 1、常量定义
–C
• #define 常量名称 常量 常量在定义 时就必须初 始化
– 静态分配(静态变量)
• 编译器在处理源代码时为变量分配内存,其效率较高,但 缺少灵活性(要求程序执行之前就知道变量所需的内存类 型和数量)
– 动态分配(动态变量)
• 程序执行时调用运行时刻库函数来分配变量的内存。
– 两者的区别
• 静态变量是有名字的变量,可以通过名字对它所代表的内 存进行操作;动态变量是没有名字的内存变量,只能通过 指针进行操作。 • 静态变量的分配和释放由编译器自动处理,动态变量的分 配与释放必须由程序员控制。
2、限制变量、参数的访问,避免非本意的数据修改举例 icp是一个常 #include<iostream.h> 量地址,此处 main(){ 企图修改它 int i, j;
const int ic = 100; const int * ip = & ic; int * const icp = & i; //icp = &j; //err *icp = 200; cout<<"i="<<i<<endl; cout<<"j="<<j<<endl; cout<<"*ip="<<*ip<<endl; cout<<"*icp="<<*icp<<endl; }
–
2.4.5 new 和delete
1、动态存储管理的概念 系统为每个程序提供了一个在程序执行时可用 的内存空间,这个内存空间被称为空闲存储区 或堆(heap),运行时刻的内存分配就称为动 态内存分配。 2、在C语言中,动态内存分配用mallc和free函数 完成
int * ip = (int*) malloc (sizeof (int) * 100);
2.4.3 指针与const
– 例题:限制函数修改参数 //eg.cpp
#include <iostream.h> void mystrcpy(char * Dest,const char *Src) { while(*Dest++=*Src++); } void main(){ char a[20]="How are you!"; char b[20]; mystrcpy(b,a); cout<<b<<endl; }
2.4.3 指针与const
4、指针常量
– 在指针定义语句的指针名前加const,表示指针本身是 常量。例如:
char * const pc=“aaaa”;//定义指针常量 ,在定义时必须初始化 pc=“bbbb”; //error,指针常量不能改变其指针值 *pc=“a //err,所指的内容可改 *pc=„a‟; //ok *(pc+1)=„b‟; //ok, pc++=„y‟; //error const int b=28; int * const pi=&b; //error,pi不能变,但它所指的内存单 却可以改变,此处却将它指向了一个不可变的内存单元,即: //不能将const in * 转换成int *