没有合适的资源?快使用搜索试试~ 我知道了~
c/c++指针总结··让你不再害怕指针
需积分: 0 4 下载量 175 浏览量
2010-03-30
13:18:55
上传
评论
收藏 316KB PDF 举报
温馨提示
试读
29页
c/c++指针总结.pdf··让你不再害怕指针
资源推荐
资源详情
资源评论
让你不再害怕指针
前言
:
复杂类型说明
要了解指针
,
多多少少会出现一些比较复杂的类型
,
所以我先介绍
一下如何完全理解一个复杂类型
,
要理解复杂类型其实很简单
,
一
个类型里会出现很多运算符
,
他们也像普通的表达式一样
,
有优先
级
,
其优先级和运算优先级一样
,
所以我总结了一下其原则
:
从变量名处起
,
根据运算符优先级结合
,
一步一步分析
.
下面让我们先从简单的类型开始慢慢分析吧
:
int p;
//
这是一个普通的整型变量
int *p;
//
首先从
P
处开始
,
先与
*
结合
,
所以说明
P
是一
//
个指针
,
然后
再与
int
结合
,
说明指针所指向
//
的内容的类型为
int
型
.
所以
P
是一个返回整
//
型数据的指针
int p[3];
//
首先从
P
处开始
,
先与
[]
结合
,
说明
P
是一个数
//
组
,
然后与
int
结合
,
说明数组里的元素是整
//
型的
,
所以
P
是一个由整型数据组成的数组
int *p[3];
//
首先从
P
处开始
,
先与
[]
结合
,
因为其优先级
//
比
*
高
,
所以
P
是一个数组
,
然后再与
*
结合
,
说明
//
数组里的元素是指针类型
,
然后再与
int
结合
,
//
说明指针所指向的内容的类型是整型的
,
所以
//P
是一个由返回整型数据的指针所组成的数组
int (*p)[3];
//
首先从
P
处开始
,
先与
*
结合
,
说明
P
是一个指针
//
然后再与
[]
结合
(
与
"()"
这步可以忽略
,
只是为
//
了改变优先级
),
说明指针所指向的内容是一个
//
数组
,
然后再与
int
结合
,
说明数组里的元素是
//
整型的
.
所以
P
是一个指向由整型数据组成的数
//
组的指针
int **p;
//
首先从
P
开始
,
先与
*
结合
,
说是
P
是一个指针
,
然
//
后再与
*
结合
,
说明指针所指向的元素是指针
,
然
//
后再与
int
结合
,
说明该指针所指向的元素是整
//
型数据
.
由于二级指针以及更高级的指针极少用
//
在复杂的类型中
,
所以后面更复杂的类型我们就
//
不考虑多级指针了
,
最多只考虑一级指针
.
int p(int);
//
从
P
处起
,
先与
()
结合
,
说明
P
是一个函数
,
然后进入
//()
里分析
,
说明该函数有一个整型变量的参数
//
然后再与外面的
int
结合
,
说明函数的返回值是
//
一个整
型数据
I
nt (*p)(int);
//
从
P
处开始
,
先与指针结合
,
说明
P
是一个指针
,
然后与
//()
结合
,
说明指针指向的是一个函数
,
然后再与
()
里的
//int
结合
,
说明函数有一个
int
型的参数
,
再与最外层的
//int
结合
,
说明函数的返回类型是整型
,
所以
P
是一个指
//
向有一个整型参数且返回类型为整型的函数的指针
int *(*p(int))[3];
//
可以先跳过
,
不看这个类型
,
过于复杂
//
从
P
开始
,
先与
()
结合
,
说明
P
是一个函数
,
然后进
//
入
()
里面
,
与
int
结合
,
说明函数有一
个整型变量
//
参数
,
然后再与外面的
*
结合
,
说明函数返回的是
//
一个指针
,,
然后到最外面一层
,
先与
[]
结合
,
说明
//
返回的指针指向的是一个数组
,
然后再与
*
结合
,
说
//
明数组里的元素是指针
,
然后再与
int
结合
,
说明指
//
针指向的内容是整型数据
.
所以
P
是一个参数为一个
//
整数据
且
返回一个指向由整型指针变量组成的数组
//
的指针变量的函数
.
说到这里也就差不多了
,
我们的任务也就这么多
,
理解了这几个类型
,
其它
的类型对我们来说也是小菜
了
,
不过我们一般不会用太复杂的类型
,
那样会
大大减小程序的可读性
,
请慎用
,
这上面的几种类型已经足够我们用了
.
1
、
细说指针
指针是一个特殊的变量
,
它里面存储的数值被解释成为内存里的一个地址
。
要搞清一个指针需要搞清指针的四方面的内容
:
指针的类型
、
指针所指向的
类型
、
指针的值或者叫指针所指向的内存区
、
指针本身所占据的内存区
。
让
我们分别说明
。
先声明几个指针放着做例子
:
例一
:
(1)int*ptr;
(2)char*ptr;
(3)int**ptr;
(4)int(*ptr)[3
];
(5)int*(*ptr)[4];
1.
指针的类型
从语法的角度看
,
你只要
把指针声明语句里的指针名字去掉
,
剩下的部
分就是这个指针的类型
。
这是指针本身所具有的类型
。
让我们看看例一中各
个指针的类型
:
(1)int*ptr;//
指针的类型是
int*
(2)char*ptr;//
指针的类型是
char*
(3)int**ptr;//
指针的类型是
int**
(4)int(*ptr)[3];//
指针的类型是
int(*)[3]
(5)int*(*ptr)[4];//
指针的类型
是
int*(*)[4]
怎么样
?
找出指针的类型的方法是不是很简单
?
2.
指针所指向的类型
当你通过指针来访问指针所指向的内存区时
,
指针所指向的类型决定了
编译器将把那片内存区里的内容当做什么来看待
。
从语法上看
,
你只须
把指针声明语句中的指针名字和名字左边的指针声
明符
*
去掉
,
剩下的就是指针所指向的类型
。
例如
:
(1)int*ptr;
//
指针所指向的类型是
int
(2)char*ptr;
//
指针所指向的的类型是
char
(3)int**ptr;
//
指针所指向的
的类型是
int*
(4)int(*ptr)[3];
//
指针所指向的的类型是
int()[3]
(5)int*(*ptr)[4];
//
指针所指向的的类型是
int*()[4]
在指针的算术运算中
,
指针所指向的类型有很大的作用
。
指针的类型
(
即指针本身的类型
)
和指针所指向的类型是两个概念
。
当你
对
C
越来越熟悉时
,
你会发现
,
把与指针搅和在一起的
"
类型
"
这个概念分成
"
指针的类型
"
和
"
指针所指向的类型
"
两个概念
,
是精通指针的关键点之一
。
我看了不少书
,
发现有些写得差的书中
,
就把指针的这两个概念搅在
一起了
,
所以看起书来前后矛盾
,
越看越糊涂
。
3.
指针的值
----
或者叫指针所指向的内存区或地址
指针的值是指针本身存储的数值
,
这个值将被编译器当作一个地址
,
而
不是一个一般的数值
。
在
32
位程序里
,
所有类型的指针的值都是一个
32
位
剩余28页未读,继续阅读
资源评论
Achillse_XuMian
- 粉丝: 62
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功