指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 下面看一些概念
*指针的类型
*指针所指向的类型
*指针的值或者叫指针所指向的内存区
*指针所指向内存区域的值
*指针本身所占据的内存区
指针的类型:指针本身的类型,比如 int *i 则指针类型为 int * ,即去掉变量剩下的部分为指针的类型。
指针所指向的类型:指针所指向变量的类型,比如 int *i 指针向int型变量,所以指针所指向的类型为int,即去掉指针变量名和左边的*号,是 指针所指向的类型。
指针的值或者叫指针所指向的内存区:因为指针是存放的变量的地址,所以指针的值一定是个地址值。即指针所指向的变量所在的内存地址。比如 int *p 则指针的值直接 cout<<p<<endl; 即可得到。
指针所指向内存区域的值:指针所指向内存区域,即指针中所存放的内存地址。因为那个内存地址是指针所指向变量的地址,所以指针指向内存区域的值即为它指向变量的值。比如:
int i;
int *p;
p = &i;
cout<<*p<<endl;
最后一句即输出了指针所指向内存区域的值
指针本身所占据的内存区: 指针也是一个变量,它存储的值是一个地址,它本身也要点用内存空间,指针本身所点内存区为:
int *p;
cout<<&p<<endl;
相关的例子:
int i = 5;
int *p;
int **ps;
p = &i;
ps = &p;
cout<<&i<<endl; //整形变量i所在的地址
cout<<p<<endl; //p存放i的地址,这输出p的值,与&i相同
cout<<&p<<endl; //指针p本身的地址
cout<<ps<<endl; //指针ps存放指针p的地址,这里输入ps的相,与上面&p相同
cout<<*ps<<endl; //这里输入ps所指向内存区域的值,因为ps指向p,即为p的值,而p指向i,所以这里输入i 的地址即:&i or p
cout<<&ps<<endl; //这里输入ps本身所占内存区域的值。
cout<<i<<endl; //i的值
cout<<*p<<endl; //i的值 p 指向内存区域的值
cout<<**ps<<endl; //i的值 ps指向内存区域的值(i 的内存地址) 的 内存区域的值(i的值)