指针:
其实指针就是一个地址,是存放变量的地址。比如通过我的抽屉里放了一支笔,这支笔就是变量,我的抽屉就是存放变量的地址,也就是指针。还比如地址2000是变量i的储存单元,那么根据地址2000我们就可以访问地址为2000的变量i,2000就是这个变量i的指针。
有个叫什么徐什么侠的所谓教授说什么只要变量前有个*就什么什么的叫它指针,唉,误人子弟,makes me sick,我们要鄙视那种不负责任的老师。
指针变量:
指针变量就是存放变量地址的变量,也就是存放指针的变量,比如我笔记本上写了我的抽屉里,笔记本就是指针变量,它存放了笔的地址抽屉,通过指向操作*,我也可以找到我的笔。(*是一个指向的操作)
比如 int*pointer 它是一个指针变量 它存放的是地址 2000,通过 *pointer 也就是指向操作,它可以找到i。 即把i赋值给pointer所指向变量,*pointer=i
等同于,我随便定义一个型 int*笔记本 它是一个指针变量 他存放的是地址是我的抽屉,通过 *笔记本这个指向操作,我可以找我的笔。因为变量笔赋值给笔记本所指向的变量,*笔记本=我的笔 就是这样
int*pointer是一个指针变量,它规定了它里面只能存放整形数据的地址,也就是说,我假如我刚才那int*pointer是存放的是地址2000,那么地址2000里存放的i必须是整形,就是这个意思。
变量i的地址是2000,2000是i的指针,但是2000并不是i的指针变量,i的指针变量是int*pointer ,莫晕。
int*pointer和pointer是一个意思,就是指针变量,只是int*pointer是定义的时候这么写的,意思是一样的,在定义的时候在int 和 pointer 里面加一个*的意思只是说明他是一个指针变量,假如就写成int pointer ,那他成整形变量了,显然不行。比如 int a,和 a,
意思也是一样的,只是定义的时候写成int a而已,都表示的是变量a。
那么怎么把一个指针变量指向一个变量呢,我们知道指针变量里存放的是变量的地址,即指针,我们只要把变量的地址付给它就行了,比如要想让int*pointer指向 j,即,让*pointer=j,那么只要把j的地址付给int*pointer就行了,即pointer=&j ,就是这样
int j=3;
int*pointer;
pointer=&j;
cout<<*Pointer;
结果就等于 3
&是取地址的操作,大家都知道,刚才我们把j的地址赋值给了pointer,其实&*pointer和&j是一样的,因为&和*的优先级一样,所以从右向左结合,也就是取 *pointer的地址,因为先运算*pointer,也就是j,我们在对*pointer取地址就相当于是对取j地址。
花了一个多小时总结的,看了下老谭的书,希望对大家有帮助,有小错误的地方请指出,谢谢