指针和指针变量的区别及取地址符的使用
2011-11-23 23:54
369 查看
指针:
其实指针就是一个地址,是存放变量的地址。比如通过我的抽屉里放了一支笔,这支笔就是变量,我的抽屉就是存放变量的地址,也就是指针。还比如地址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地址。
花了一个多小时总结的,看了下老谭的书,希望对大家有帮助,有小错误的地方请指出,谢谢
相关文章推荐
- 指针,地址,指针变量之间的区别和联系
- 引用的定义、使用及其和指针的区别与联系
- 试说明IP地址与物理地址的区别。为什么要使用这两种不同的地址。
- Boost.Interprocess使用手册翻译之五:独立于映射地址的指针:offset_pt (Mapping Address Independent Pointer: offset_ptr)
- 一、初级篇——指针(*)、取地址(&)、解引用(*)与引用(&)的区别
- 字符指针与其他类型的指针的使用区别
- C++使用模板、函数指针、接口和lambda表达式这四种方法做回调函数的区别比较
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
- 指针(*)、取地址(&)、解引用(*)与引用(&)的区别
- 使用malloc分别分配2KB的空间,然后用realloc调整为6KB的内存空间,打印指针地址
- C语言中的指针和地址的区别
- 指针及指针变量的区别
- 指针数组、指向指针的指针变量、指向一维数组的指针变量 区别联系
- c语言指针和地址中 &a 和*a 有啥区别
- Web工程下URL地址,有斜杠与没有斜杠路径的区别及使用
- 127.0.0.1、0.0.0.0和本机IP地址的区别和使用
- 数组名和数组名加地址符的区别(了解指针)
- 区别于windows,Linux下 结构体指针应正确使用,否则易引发错误
- 使用字符串指针变量和字符数组的区别
- Boost.Interprocess使用手册翻译之五:独立于映射地址的指针:offset_pt (Mapping Address Independent Pointer: offset_ptr)