没有合适的资源?快使用搜索试试~ 我知道了~
c++关于指针的学习资料
需积分: 0 5 下载量 177 浏览量
2010-10-03
21:37:41
上传
评论
收藏 422KB PPT 举报
温馨提示
试读
53页
学习c++的指针的入门资料,指针作为c++的核心,是学习C++的重点,主要为初学者介绍指针部分
资源推荐
资源详情
资源评论
第三章 指针和引用
第三章 指针和引用
指针回顾
指针回顾
动态分配内存-
动态分配内存-
new
new
和
和
delete
delete
const
const
修饰的指针
修饰的指针
函数指针
函数指针
字符串
字符串
引用:概念,语法,特性,
引用:概念,语法,特性,
const
const
限定
限定
引用和指针的联系,区别
引用和指针的联系,区别
引用和指针用于函数
引用和指针用于函数
功能强,灵活。
很难,容易出错。
不当的使用导致
程序崩溃
直接引用:通过变量名访问
直接引用:通过变量名访问
(
(
读写
读写
)
)
内存
内存
int n=10; //
int n=10; //
将为
将为
n
n
分配内存空间
分配内存空间
变量占据一段连续内存空间,且在变量生存期内位置固定。
变量占据一段连续内存空间,且在变量生存期内位置固定。
&
&
算符
算符
: &n=0x00112234
: &n=0x00112234
间接引用:通过指针的
间接引用:通过指针的
*
*
算符访问内存
算符访问内存
int* p=&n;
int* p=&n;
指针中所存放的值是地址
指针中所存放的值是地址
*p
*p
可以访问到
可以访问到
n
n
所占内存空间
所占内存空间
指针本身是变量,
指针本身是变量,
&p=?
&p=?
3.1
3.1
指针回顾-本质
指针回顾-本质
…
…
0x0012FF70
0x0012FF70
…
…
0x0012FF74
0x0012FF74
…
…
0x0012FF78
0x0012FF78
n=10
n=10
0x0012FF7C
0x0012FF7C
(
(
&n)
&n)
…
…
0x0012FF80
0x0012FF80
局部指针位于栈的内存
局部指针位于栈的内存
空间中。全局或静态指
空间中。全局或静态指
针位于全局数据区。
针位于全局数据区。
[演示1]使用VC的调试工具理解指针。
p=0x0012ff7c
p=0x0012ff7c
3.1
3.1
指针回顾-规则
指针回顾-规则
指针在定义时应该初始化。
指针在定义时应该初始化。
指针的初始化:
指针的初始化:
示例
示例
不经初始化而使用是非常危险的。
不经初始化而使用是非常危险的。
int *iPtr;
int *iPtr;
//iPtr
//iPtr
的值为不确定的地址。应该初始化
的值为不确定的地址。应该初始化
*iPtr=1;
*iPtr=1;
//
//
语法无错,但是程序多半会崩溃
语法无错,但是程序多半会崩溃
指针在使用前应该判断其是否有效。
指针在使用前应该判断其是否有效。
int* pHead = GetListHead(); //
int* pHead = GetListHead(); //
可能会返回
可能会返回
NULL
NULL
if(pHead != NULL) /* if(pHead) */
if(pHead != NULL) /* if(pHead) */
{
{
//
//
下面的语句可能因为
下面的语句可能因为
pHead
pHead
为
为
NULL
NULL
而崩溃
而崩溃
*pHead = *pHead + 1;
*pHead = *pHead + 1;
}
}
这些规则使得指针的使用易于出错。
这些规则使得指针的使用易于出错。
3.1
3.1
指针回顾-运算
指针回顾-运算
指针运算包括算术运算
指针运算包括算术运算
(
(
加法和减法
加法和减法
)
)
、关系运算
、关系运算
和赋值运算。
和赋值运算。
指针的加减是以指针所指类型的大小为单位展开的。
指针的加减是以指针所指类型的大小为单位展开的。
T *pT;
T *pT;
assert( int(pT+1) == int(pT)+sizeof(T) );
assert( int(pT+1) == int(pT)+sizeof(T) );
在指针的加减过程中应随时注意指针越界。
在指针的加减过程中应随时注意指针越界。
int a[5];
int a[5];
int* p = &a[1];
int* p = &a[1];
*p--=3;
*p--=3;
// a[1]=10; p=&a[0]
// a[1]=10; p=&a[0]
*--p=10;
*--p=10;
// p=&a[-1] ???
// p=&a[-1] ???
越界
越界
!!!
!!!
教材
教材
P153
P153
页第
页第
10
10
行“指向
行“指向
&a[0]”
&a[0]”
不够严谨,应为
不够严谨,应为
“指向
“指向
a[0]
a[0]
或等于
或等于
&a[0]”
&a[0]”
。
。
3.1
3.1
指针回顾-类型转换
指针回顾-类型转换
void
void
指针
指针
:
:
void* p;
void* p;
不指向任何类型,仅仅存储一个地址。
不指向任何类型,仅仅存储一个地址。
不能使用
不能使用
*
*
算符间接引用,不能执行加减运算。
算符间接引用,不能执行加减运算。
任何指针都可以隐式的转换为
任何指针都可以隐式的转换为
void
void
指针。
指针。
void
void
指针必须显式转换为其他类型的指针。
指针必须显式转换为其他类型的指针。
void
void
指针通常用来编写通用函数。
指针通常用来编写通用函数。
(
(
教材
教材
P167)
P167)
任何类型的指针都可以强制
任何类型的指针都可以强制
(
(
显式
显式
)
)
转换为
转换为
其他类型的指针。
其他类型的指针。
示例
示例
:
:
剩余52页未读,继续阅读
资源评论
marysss
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功