文档介绍:7
第七章
指针
指针是一种特殊的数据类型。
指针概念是C++语言中较难理解和较难掌握的概念之一。
本章介绍指针的概念、定义、运算等内容。
指针变量是一种特殊的变量,变量中存放的不是某种数据类型的数据,而是另一个变量或常量的地址。
§
如有定义:
int value=150; char ch=‘M’;
并执行赋值语句:
pv=&value; pc=&ch; //pv holds the address of value
由于pv中存放的是value变量的地址,pc中存放的是ch变量的地址,故称pv和pc为指针变量。简称为指针(Pointer)。
指针指向的对象称为目标或目标变量(常量)。:
…
150
…
‘M’
…
…
value
ch
pv
pc
*pv
*pc
内存空间
1000H
1050H
0000H
&value 1000H
1001H
&ch 1050H
&pc 11A2H
11A3H
11A1H
&pv 11A0H
C++规定:
目标或目标变量可以用指针变量名前加上运算符“* ”表示。
pv的目标变量value可表示为*pv,
pc的目标变量ch可表示为*pc,
即*pv和value等效
*pc和ch等效
而&pv和&pc表示针变量本身的地址,当指针变量为2个字节时,
最大访问地址为:
一、指针的定义
指针变量也必须先定义后使用
定义的一般格式:
类型定义符*指针变量名;
其中:类型定义符——指针指向对象的数据类型
“*”——说明符,表示其后的标识符是指针变量,而不是
一般变量。
例如:
int *ptr ; char *name ; float *pf ;
其中,定义ptr,name,pf分别为指向整型、字符型和浮点型
数据的指针。
const int *ptr; // pointer to int const
const char *cpc
const float *point
其中,ptr,cpc,point为指向常量的指针。
注意:
指针变量可以与其他变量一起定义,如:
int a, bb,*c;
char *p, *q, ch;
指针变量也可定义为全局,静态和局部的指针。
例如:
int num, *pn;
char color , *pc;
执行语句
pn=# pc=&color;
则在程序中
*pn=100; 等效于num=100;
*pc=‘r’; 等效于color=‘r’;
这里,“*”作为访问目标变量的运算符,在定义指针时,
“*”作为说明符。注意使用上的区别。
二、指针赋值
使用指针前,必须给已定义指针变量赋以指向目标变量的地址值。“&”操作符可获取变量的地址。
指针赋值的几种情况:
同种数据类型的指针变量之间可以相互赋值。
int a, *pa, *pb;
pa=&a; pb=pa; //pa, pb holds the same address of a
指针变量可以赋初值:
int a, b, c;
int *pa=&a, *pc=&c;
指针可初始化为空指针
char *p=NULL;
指针变量的类型名与指向目标的数据类型一致。
例如:
int *p, a; float b, *q;
p=&b; q=&a; //错误
p=&a; q=&b; //正确
例:有关指针概念的程序
#include <>
void main( )
{
int icount=18;
int *ptr=&icount;
*ptr=58;
cout<<icount<<endl;
cout<<ptr<<endl;
cout<<&icount<<endl;
cout<<*ptr<<endl;
cout<<&ptr<<endl;
}
结果:
58 58
0x0067fe00 0x0067fdfc
0x0067fe00
三、指针变量的地址
指针也是变量,指针变量的地址是指它本身的内存地址,。
…
150
…
‘M’
…
1000H
1050H
…
value
ch
pv
pc
*pv
*pc
0000H
&value 1000H
1001H
&ch 1050H
11A1H
&pv 11A0H
&pc 11A2H
11A3H
图示如下:
0067:FE00
(&icount)
58
ptr
icount
0067:FE00
*ptr
0067:FDFC
(&ptr)
§
指针运算实质上是地址