深入解读C++中的指针变量
针变量是一种特殊的变量它和以前学过的其他类型的变量的不同之处是用它来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系在C中用“*”符号表示指向例如i_pointer是一个指针变量而*i_pointer表示i_pointer所指向的变量。下面两个语句作用相同12i3;*i_pointer3;定义指针变量C规定所有变量在使用前必须先定义即指定其类型。在编译时按变量类型分配存储空间。对指针变量必须将它定义为指针类型。先看一个具体例子12inti, j;//定义整型变量ijint*pointer_1, *pointer_2;//定义指针变量*pointer_1*pointer_2第2行开头的int是指所定义的指针变量是指向整型数据的指针变量。也就是说指针变量pointer_1和pointer_2只能用来指向整型数据(例如i和j)而不能指向浮点型变量a和b。这个int就是指针变量的基类型。指针变量的基类型用来指定该指针变量可以指向的变量的类型。定义指针变量的一般形式为基类型 *指针变量名;下面都是合法的定义:12float*pointer_3;// pointer_3是指向单精度型数据的指针变量char*pointer_4;// pointer_4是指向字符型数据的指针变量请注意指针变量名是pointer_3和pointer_4而不是*pointer_3和*pointer_4即“*”不是指针变量名的一部分在定义变量时在变量名前加一个“*”表示该变量是指针变量。那么怎样使一个指针变量指向另一个变量呢只需要把被指向的变量的地址赋给指针变量即可。例如12pointer_1i;//将变量i的地址存放到指针变量pointer_1中pointer_2j;//将变量j的地址存放到指针变量pointer_2中这样pointer_1就指向了变量ipointer_2就指向了变量j。见图。一般的C编译系统为每一个指针变量分配4个字节的存储单元用来存放变量的地址。在定义指针变量时要注意不能用一个整数给一个指针变量赋初值在定义指针变量时必须指定基类型。引用指针变量有两个与指针变量有关的运算符取地址运算符。*指针运算符(或称间接访问运算符)。例如a为变量a的地址*p为指针变量p所指向的存储单元。【例】通过指针变量访问整型变量。12345678910111213#include iostreamusingnamespacestd;intmain( ){inta,b;//定义整型变量a,bint*pointer_1,*pointer_2;//定义指针变量*pointer_1,*pointer_2a100;b10;//对a,b赋值pointer_1a;//把变量a的地址赋给pointer_1pointer_2b;//把变量a的地址赋给pointer_2couta bendl;//输出a和b的值cout*pointer_1 *pointer_2endl;//输出*pointer_1和*pointer_2的值return0;}运行结果为12100 10 (a和b的值)100 10 (*pointer_1和*pointer_2的值)请对照图分析。下面对“”和“*”运算符再做些说明1) 如果已执行了“pointer_1a;”语句请问*pointer_1的含义是什么“”和“*”两个运算符的优先级别相同但按自右至左方向结合因此先进行*pointer_1的运算它就是变量a再执行运算。因此*pointer_1与a相同即变量a的地址。如果有pointer_2*pointer_1;它的作用是将a(a的地址)赋给pointer_2如果pointer_2原来指向b经过重新赋值后它已不再指向b了而也指向了a。2) *a的含义是什么先进行a的运算得a的地址再进行*运算即a所指向的变量*a和*pointer_1的作用是一样的(假设已执行了“pointer_1a;”)它们等价于变量a。即*a与a等价见图。【例】输入a和b两个整数按先大后小的顺序输出a和b用指针变量处理。解此题的思路是设两个指针变量p1和p2使它们分别指向a和b。使p1指向a和b中的大者p2指向小者顺序输出*p1*p2就实现了按先大后小的顺序输出a和b。按此思路编写程序如下12345678910111213141516#include iostreamusingnamespacestd;intmain( ){int*p1,*p2,*p,a,b;cinab;//输入两个整数p1a;//使p1指向ap2b;//使p2指向bif(ab)//如果ab就使p1与p2的值交换{pp1;p1p2;p2p;//将p1的指向与p2的指向交换}coutaa bbendl;coutmax*p1 min*p2endl;return0;}运行情况如下:1234578↙a45 b78max78 min45输入a的值45b的值78由于ab将p1的值和p2的值交换即将p1的指向与p2的指向交换。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2568292.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!