- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3、指针与一维数组
通过下标访问数组元素
int a[10]; int k; for(k=0;k<10;k++) a[k] = k;
程序员负责检 查下标是否越 界!
第02章 C++概述
信工计算机教研室
指针与一维数组
通过数组名访问数组元素
int a[10]; int k; for(k=0;k<10;k++) *(a+k) = k;
int a=7, *pa=&a; double b=2.5,*pb=&b;
void *pv; pv=pa; cout<< *(int *)pv<<endl; 符合原来 pv=pb; 的类型 cout<<*(double *)pv<<endl;
第02章 C++概述 信工计算机教研室
任意类型指针都可 赋值给void类型
指向数组的指 针常用于指向 二维数组
信工计算机教研室
第02章 C++概述
指向数组的指针
访问数组元素的其它方式
a[i][j] p[i][j] *(a[i]+j) *(p[i]+j) *(*(a+i)+j) *(*(p+i)+j)
第02章 C++概述
信工计算机教研室
5、指针数组
数据类型 *变量名[常量表达式]
第02章
C++概述
第02章 C++概述
信工计算机教研室
主要内容
2.1 标识符与关键字 2.2 数据类型 2.3 常量和变量
2.4 数组和指针
2.5 函数
第02章 C++概述
信工计算机教研室
标识符与关键字
标识符避免使用下面的名称
C++语言系统的关键字,如double、void等 C++标准类库或对象,如cin和cout C语言中标准库函数名,如printf
第02章 C++概述 信工计算机教研室
动态内存分配
开辟带初值的某种类型的单个空间 int *p; 分配空间 p=new int(5); 并初始化 cout<<*p<<endl; 为5 …… delete p;
第02章 C++概述
信工计算机教研室
动态内存分配
开辟多个元素的空间 int *p; 分配10个 p=new int[10]; int元素空间 *p=5; 不能初始化 p++; *p=6; …… 删除多个元 素,[]必不可少 delete []p;
第02章 C++概述
信工计算机教研室
常量
字面常量
字符常量
‘A‟、 ‘c‟ 转义字符:‘\n‟
字符串常量
“Hello World” 比较:0、‘\0‟、‘0‟、“0”
第02章 C++概述
信工计算机教研室
常量
符号常量
#define PI 3.1415926
命名常量定义:推荐使用
const int ArraySize=100; int array[ArraySize]; …… const float PI=3.1415926;
出现运行错误
第02章 C++概述
信工计算机教研室
动态内存分配注意事项
不能对动态请求的内存连续使用delete释放2次; 注意delete的本质 void fun() 栈 { 堆 int *pa=new int(5); 2000 pa *pa=5; 2000 …… 5 X delete pa; cout<<pa<<endl; }
第02章 C++概述 信工计算机教研室
2、函数的指针传递
第02章 C++概述 信工计算机教研室
主要内容
2.1 标识符与关键字 2.2 数据类型 2.3 常量和变量
2.4 数组和指针
2.5 函数
第02章 C++概述
信工计算机教研室
1、指针变量
地址的概念
定义一个变量,程序执行后数据会加载到内存 中的某个地方,计算机如何找到这个地方? 地址:内存按字节编号,0、1、2…… 存储单元的编号就是该单元的地址,它表明了 该存储单元在内存中的位置 系统根据变量的地址而不是任何别的东西寻找 某个变量。 变量的地址:变量占用的首个存储单元的地址
…
第02章 C++概述
信工计算机教研室
指针变量
int a=5; int *pa; pa=&a;
指针变量pa指 向变量a
第02章 C++概述
信工计算机教研室
2、指针变量的使用要点
引用前一定要初始化 int a=5; int *pa; // pa=&a; 一定要初始化 *pa=10;
第02章 C++概述
int a,b,c,d; int *p[4]={&a,&b,&c,&d};
定义含4个元素的指针数组,p只是数组名 int aa[2][3]; int (*pa)[3]; pa是指针变量,指向含3个int元素的一维数组 pa=aa;
第02章 C++概述
信工计算机教研室
6、动态内存分配
内存布局
全局变量--静态数据区,在main或 WinMain前完成地址空间分配并初始化。 静态变量--静态数据区,第一次使用时分配 地址空间并初始化,静态数据区在程序退出后 由操作系统释放。 动态请求--堆,C中的malloc和free,C++ 中的new和delete,运行时确定,程序员维护 局部变量和函数参数--栈中,函数被调用时 确定,操作系统自动维护
第02章 C++概述 信工计算机教研室
动态内存分配
开辟某种类型的单个空间 用相同类型 int *p; if((p=new int) == NULL) 的指针接收 { cout<<“error”<<endl; exit(0); malloc返 } 回void * *p=5; …… delete p;
第02章 C++概述 信工计算机教研室
动态内存分配注意事项
另外一种形式的内存泄漏 void fun() { 栈 int *pa=new int(5); …… 2000 pa X } void main() { fun(); …… fun返回后,pa被释放,5所占 用的内存不可访问!! }
第02章 C++概述
a[k] p[k] *(a+k) *(p+k)
for(k=0;k<10;k++) *p++=k; *a++=k; X a不能被 改变
第02章 C++概述
信工计算机教研室
4、指向数组的指针
数据类型 (*指针变量名)[常量表达式]
int a[2][3]={……}; int (*p)[3]; p=a; for(int i=0;i<2;i++) for(int j=0;j<3;j++) p[i][j] =……
第02章 C++概述
信工计算机教研室
变量的地址
变量的地址
变量a占用的是内存的 2000~2003四个单元, 变量a的地址为2000。 源代码中写a=5;我们 可以理解为将5赋给变量 a;而计算机在执行程序 时,只是将5送入 2000~2003四个存储单 元中。
0 2 …
int a;
2000 2002
第02章 C++概述 信工计算机教研室
动态内存分配注意事项
避免内存泄漏 int *pa,*pb; pa=new int(5); pb=new int(10); pa=pb; 初值为5的空 …… 间无法再访问
第02章 C++概述
信工计算机教研室
动态内存分配注意事项
普通变量不能通过delete释放 int a=5; int *pa=&a; …… delete pa; 通过编译,但
看成是int 函数调用
第02章 C++概述
信工计算机教研室
隐式数据类型转换
赋值转换 表达式求值转换 返回值类型转换
int add(double x,double y) { return x+y; 运行结果 } 5 …… cout<<add(2.5+3.2)<<endl;
第02章 C++概述
信工计算机教wk.baidu.com室
第02章 C++概述
信工计算机教研室
3、两种风格的强制类型转换
C风格:(数据类型)表达式 float a=3.6, b=2.5; 5→c int c = (int) a+b; int c = (int) (a+b); 6→c C++风格: 数据类型(表达式) int c = int ( a+b); 6→c
程序运 行时决 定
编译时 决定
第02章 C++概述
信工计算机教研室
变量定义的位置
C++的初始化
int i(5);
变量定义的位置
C语言:集中先定义,之后为语句 C++:可以随时定义,也要遵循先定义后使用 的原则
第02章 C++概述
信工计算机教研室
::运算符
【示例2.2】全局变量访问
#include <iostream> using namespace std; int x=6; //全局变量 运行结果 1 void main() 6 { int x=1; cout<<x<<endl; //访问局部变量 cout<<::x<<endl; //访问全局变量 }
主要内容
2.1 标识符与关键字 2.2 数据类型 2.3 常量和变量
2.4 数组和指针
2.5 函数
第02章 C++概述
信工计算机教研室
1、常量
字面常量
整型常量
十进制:34、-28 八进制:045 十六进制:0x7B 长整型后缀为l或L,无符号整型后缀u或U
浮点型常量
十进制形式:0.12、.13 指数形式:1.2e9 float后缀f或F,double后缀l或L
VC规定标识符的名称最长为247个,最好 做到“见名知义”。
第02章 C++概述
信工计算机教研室
主要内容
2.1 标识符与关键字 2.2 数据类型 2.3 常量和变量
2.4 数组和指针
2.5 函数
第02章 C++概述
信工计算机教研室
1、基本数据类型
字符型:char 整型:short、int、long(带符号型) 无符号型:unsigned int等 浮点型
堆
5
2000
信工计算机教研室
主要内容
2.1 标识符与关键字 2.2 数据类型 2.3 常量和变量
2.4 数组和指针
2.5 函数
第02章 C++概述
信工计算机教研室
1、函数的值传递
函数的参数是局部变量,栈中
int sum(int a,int b) { sum main return a+b; 5 x 5 a } 4 y 4 b void main() { int x(5),y(4); 运行结果 cout<<sum(x,y)<<endl; 9 }
第02章 C++概述
信工计算机教研室
指针与一维数组
通过指针变量访问数组元素
int a[10]; int k,*p; p=a; 或p=&a[0]; for(k=0;k<10;k++) *(p+k)=k; 或者p[k]=k;
第02章 C++概述
信工计算机教研室
指针与一维数组
指针变量和数组名的使用区别
第02章 C++概述
信工计算机教研室
2、结构的使用
C风格的结构体 struct point { int x; int y; }; C风格结构体变量定义 struct point point1={3,5};
第02章 C++概述 信工计算机教研室
2、结构的使用
C++风格的结构体变量定义 struct point { int x; point直接作为类型 int y; 名称;联合和枚举的 }; 用法类似 point point1={3,5};
float double long double
布尔型:bool,取值true和false,1字节
第02章 C++概述 信工计算机教研室
基本数据类型说明
bool型的true实际存储为1,false存储为0 不同系统对同一类型的长度定义不等,避免 使用int,而是明确使用short或long等类型 float和double型不能用signed或 unsigned修饰
第02章 C++概述
信工计算机教研室
常量示例
#define P P=1; const float 1 void main() { float f=1.0; cout<<f+P/2<<endl; }
运行结果 1.0
运行结果 1.5
第02章 C++概述
信工计算机教研室
2、变量
赋值与初始化 int i; i=5; int i=6;
信工计算机教研室
指针变量的使用要点
数据类型要匹配
指针变量的数据类型,必须与其所指向的变量 的数据类型一致。 不可以在不同类型指针变量之间赋值。 指针变量中存储的是一个表示地址的整数值, 但不可以将一个整数值直接赋给指针变量。
第02章 C++概述
信工计算机教研室
指针变量的使用要点
void指针及强制类型转换