信息学奥赛之c++语法(二十三)指针
一天,Ivy把借来的书还给Tom,Tom不在家,于是Ivy把书放到了书架第3层的最右边,并写了一张留言条放在桌上,上面写着:我还你的书放在书架第3层最右边。当Tom回来后,看到这张留言条就知道书在哪了。
这张留言条有什么作用呢?它就相当于一个指针,上面的内容不是书本身,而是书的位置,Tom通过留言条(指针)找到了Ivy还回来的书。
指针是一个功能强大的利器,正确灵活地使用它,可以使程序简洁、紧凑、高效。指针是一个指示器,它告诉程序可以在内存的哪块区域找到数据,让我们先看一个程序吧。
#include
using namespace std;
int main(){
int a,*p;
a=10;
p=&a;
cout<<*p<<endl;< p="">
return 0;
}
运行结果:10
“*p”、“&a”是什么意思呢?
程序中,定义了整形变量a,在编译时,系统会开辟一块内存单元用来存放a的值,对a的存取操作就是直接到这个内存单元存取。内存单元的位置叫地址,存放a的值的地址可以用取地址操作符“&”对a运算得到:&a。同时,定义了一个指针变量p,p将指向一个内存单元,里面将存放一个内存地址。现赋值为存放变量a的内存单元的地址。
内存单元的地址是按字节编码的,即每一个字节都有一个不同的地址。编译系统会根据程序中定义的变量类型,为每个变量分配一定长度的空间。在Dev-C++中为整型变量分配4个字节,假设系统把地址为101~104的4个字节分配给变量a,把地址为105~108的4个字节分配给指针变量p,如下图:
“*”是指针操作符。在定义变量时,*p代表变量p定义为指针类型;在使用变量时,*p代表指针变量p中存放的地址所指向的内存单元。普通变量和指针变量的对应关系如下图:
一个变量的地址称为该变量的指针,用来专门存放地址的变量是指针变量。地址是内存中的“门牌号”,是固定不变的,而指针变量的值是可以改变的,因为任何变量的地址都可以赋值给同类型的指针变量。
例:通过指针对两个数进行相加和相乘,并输出。
#include
#include
using namespace std;
int main(){
int a,b,s,t,*pa,*pb;
pa=&a;
pb=&b;
a=10;b=20;
s=*pa+*pb;
t=*pa**pb;
printf("a=%d,b=%dn",*pa,*pb);
printf("s=%d,t=%dn",s,t);
return 0;
}
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com