标签:
C++中提供了用基本数据类型构造的构造数据类型来对复杂的数据进行描述与处理。这些构造数据类型包括枚
举、数组、结构、联合、指针、引用。 接下来结合我对指针的认识来说说指针。
一、指针的由来
要想了解指针,得先看看什么是地址。
当定义一个变量后,内存中将会划分出一块若干个存储单元组成的区域,用于保存该该变量的的数据 ,如图所
示,内存里每个存储单元都有各自的编号,这个编号就叫做地址。 这些地址也是数据,它们存放在哪里呢? 在
C++里,提供了指针类型,当一个变量被定义成一个指针类型后,就可以把地址存入这个变量中了。 这样我们形象
地把这种可以存放内存单元地址的变量叫做指针。
二、定义指针
每当存储一个地址,就得定义一个指针变量。
定义格式为 数据类型 * 变量名(指针名)
数据类型是指针指向内存单元中的数据的类型, *是一个表示符号。
三、怎么使用
1、初始化
定义指针后,只是得到了一个能存储地址的指针,它里面存放的是一个随机数,所以在使用指针前,必须将其初
始化。
2、赋值
赋值格式可以是 数据类型*指针变量名=初始地址表达式;也可以在定义指针后,指针变量名=地址表达式。
需要注意的地方:
(1)指针是存放地址的,不要将非地址常量或变量以及无意义的地址赋给指针变量。
(2)已经初始化的指针可以给同类型的指针赋值, 类型不一致可以强制转换。 这个和普通变量赋值的意思差不多。
(3)如果基本数据类型的变量、数组等可以用& 获取自身地址,赋值给相同类型的指针。
三、指针应用
1、与字符串关系
字符型指针用于存放字符型变量的地址。
一个字符型指针存储了字符串的第一个字符的地址,由于这个指针指向了字符串首地址,所以其他字符的地址我
们也就可以知道了。
从下面这个例子来看看指针和字符串的关系:
Char *P_str="abcd" ,指针中存放的是字符‘a‘ 在内存中的地址。
2、与数组关系
指针数组
数组中可以存放字符串,数字等元素, 当把指针存到数组中时,这个数组就成了指针数组。
基本形式为 类型名* 数组名[ 下标表达式] 例如:int * p_a[5]
数组指针
数组也是有地址的,指针中存放的是数组地址时,这个指针就成了数组指针。
基本形式为 类型名(* 指针名)[下标表达式] 例如:int * a_p[5]
4、与函数关系
作为函数参数
在这里,指针作为函数参数是按地址传递数据。 当作为函数形参时,指针指向内存中的数据直接成了函数的参数。
指针型函数
有返回值的函数可以返回一个值, 当这个函数被定义返回值类型为指针型时,返回的值是一个地址。 这时这个
函数名就是指针名,我们称这样的函数为指针型函数。
指向函数的指针
函数名是函数在内存中的起始地址,调用函数时,就是根据函数名找到函数在内存中的地址,然后执行函数。 这
时,如果指针中存放的是函数的首地址,那么就这个指针就是指向函数的指针了。
5、与常量关系
指针常量
指针名前被const修饰,这时指针中存放的地址就成了一个不可修改的常量。
常量指针
当const加在数据类型前,这时指针指向的内存单元的内容不可以修改。 但可以修改指针中存放的地址。
常指针常量
当数据类型前和指针名前都加const后, 很显然,以上两个合并一下,既不能修改指针中存放的地址,也不能修改指针指向的内存单元中的内容。
四、小结
指针这一块的内容我总结的还不是很全面,还有很多东西没有在这里写,指针在C++程序中扮演着非常重要重要的角色,如果不能深刻理解指针,学习C++是很困难的,是很容易产生困惑的。我也是初学,可能有些地方理解的不对,还望大家斧正。 也欢迎大家和我交流关于指针中的问题!
标签:
原文地址:http://blog.csdn.net/wangju2013/article/details/43924705