我也来解释下指针!懂的人来批批我的解释方法!
想理解指针,我相信你一定知道什么是内存,我也相信你知道内存是一个以(字节为单元的临时数据处理区)!我仍然相信你知道内存的每个单元都有标识区别于其它单元的名称(叫它地址吧),一个内存单元对应一个地址!
呵呵!
可以开始了!
指针是什么? - 确实,它同 int char float 等一样是一种数据类型;
指针变量与普通的数据类型变量有何不同?且往看..
char a='A';
// 这里我们声明了一个 char 类型变量 a
假定有系统为上面的变量 a 分配了一个地址: 0x00101, 那么变量 a 中的变量名 'a' 其实就是 0x00101这个地址的别一个名字而以,为了让我们更好的表明变量的使用。
那么 a = 'a' 就可以理解为 “内存地址为 0x00101 的单元的值等 'A' ;
就像下面形式:
变量a 的地址
---------------------------------------------------------------------------------
0x00100 | 0x00101 | 0x00102 | 0x00103
---------------------------------------------------------------------------------
'A'
--------------------------------------------------------------------------------
变量 a 的内容
理解了上面后理解指针就容很多了!下面我们来看看 指针变量与普通的数据类型有何不同!请看:
char a = 'A'; // char 类型 变量 a 的值 等 'A' , 同时可以看成地址为0x00101的内存单元的内容 = 'A'
char* pa=&a; // 这里我们定义了一个特别用于指向char 类型的指针 pa 他的值等于 &a, 符号"&"是取地址运算符
// 也就是说, &a 就等于取得变量 a 的地址即 0x00101 !
// 那么现在就很好理解了 pa = &a; 就是 让指针变量 pa 的内容等于 变量 a 的地址,即 pa = 0x00101
// 现在是不是有点点理解了!我们再加深入一点!
// 假定系统为指针变量分配的地址单元为 0x00103 ,
// 那么 pa = &a ,就可以理解为: 使地址为 0x00103 的内存单元的内容等于 0x00101;
// 是的!就是这样!指针变量的内容不是真实的数据(不是普通的数据),而是另一个变量的地址,
// 如果 指针变量pa 的内容 等于 变量 a 的地址时,我们可以说 pa 指向了 a
就像下面的形式:
变量a 的地址 变量 pa 的地址
--------------------------------------------------------------------------
0x00100 | 0x00101 | 0x00102 | 0x00103
---------------------------------------------------------------------------
'A' 0x00101
-------------------------------------------------------------------------
变量 a 的内容 变量pa的内容
--------------------------------------------------------------------------
从以上的形式表中可以看出, 变量 pa 的内容不是一个实际意义上的数据 它是一个内存的地址
所以记住"指针的值是地址" 这是跟普通变量不同的一点!
当指针的内容等于哪个变量的地址时,我们通常说指针指向了它
如 pa = &a; 我们说 pa 指向了 a;
我们可以通过运算符"*" 取出指针指向的地址的内容
如
char a = 'A';
char * pa=&a;
char b;
b = *pa; // 此时变量 b 的值也等于 'A' ,因为 * 运算符会取出指针 pa 指向的地址 0x00101 里的内容,这个内容是 'A',所以变量 b = 'A'
也就是说, 通过指针变量名 pa 得到得是指针的内容即 0x00101 ,
而通过 *pa 取出的值是指针的内容表示的地址(这里 pa 的内容是的地址 0x00101)里的值(0x00101 这个地址的值是'A');
应该会了!呵呵!
再看看下面! 联想一下说出变量b的值
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char a = 'A';
char *pa = &a;
char b;
char *pb = &b;
*pb = *pa;
std::cout<<b<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}