信息学奥赛之c++语法(二十三)指针

网友投稿 2018-12-11 11:39

一天,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,如下图:

https://cdn.china-scratch.com/timg/181213/1139452200-0.jpg

“*”是指针操作符。在定义变量时,*p代表变量p定义为指针类型;在使用变量时,*p代表指针变量p中存放的地址所指向的内存单元。普通变量和指针变量的对应关系如下图:

https://cdn.china-scratch.com/timg/181213/11394511X-1.jpg

一个变量的地址称为该变量的指针,用来专门存放地址的变量是指针变量。地址是内存中的“门牌号”,是固定不变的,而指针变量的值是可以改变的,因为任何变量的地址都可以赋值给同类型的指针变量。

例:通过指针对两个数进行相加和相乘,并输出。

#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;

https://cdn.china-scratch.com/timg/181213/1139451344-2.jpg

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com