可爱的指针(一)

可爱的指针(一)

基本介绍

在互联网时代,几乎人人都会使用互联网来浏览信息。自互联网2.0以后,网页也变得越来越丰富。一个网页可以包含各种形式的信息,比如文字、图片、视频等。网页及其中的图片、视频都可以通过网址来获得。比如链接https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/potw2045a.jpg对应一张NASA的星云图。
[图片上传失败...(image-f2f3ba-1605971654846)]
给定一个链接(或者称之为地址),浏览器会根据地址向对应的服务器获取图片(内容)。指针也是类似的概念。我们可以把网络地址看成指向网络资源的指针。

在计算机内存中,每一个资源都对应了一个地址。每当我们用程序语言定义一个变量,计算机都会在内存中开辟一个特定大小的存储空间,用来存储对应变量的值。
[图片上传失败...(image-57e600-1605971654846)]
每一个变量都有三个要素:(1)变量名,(2)变量的地址,(3)变量的值。在上面的图中,变量c的地址为0x0012FF74,变量c的值为76。不难发现,变量和上面例子当中的NASA星云图是很像的。和指向星云图的指针(网址)类似,我们可以把某个变量的地址称为指向该变量的指针。

有趣的是,计算机是可以通过变量的地址(指针)访问或改变变量的内容。抛开指针,我们可以通过cout<来打印变量c的值。在使用指针来打印变量之前,我们首先需要获得变量的指针(地址)。C++语言中,可以通过&c获得变量c的地址(指针)。如果我们想把&c存放在一个变量里,我们就需要定义一个指针变量 int* pointerpointer作为指针变量,它是用来存储指针的,pointer本身作为一个变量,也有一个对应的地址,这个地址和它本身存储的地址是不同的)。pointer = &c称作指向变量c的指针。

int c = 76; //定义int类型变量c,并赋值76
int *pointer; //定义名字为pointer的指针变量,*表示pointer类型为指针类型
pointer = &c; //将变量c的地址赋值给指针变量pointer

这里,int *中的int称为指针类型的基类型,基类型可以帮助程序确定指针指向的变量在内存中所占空间的大小。

有了指针变量之后,如何通过指针变量访问指针变量指向的变量内容呢?(如何利用pointer访问变量c的值76呢?)可以使用指针运算符*实现。使用*pointer,我们可以获得pointer所指向的存储单元的内容。这里,pointer所指向的存储单元的内容是变量c(注意,内容是变量c而不是76,因为我们可以实现操作*pointer = 72其含义等于c = 72)。

Example 1:

void main(){
  int c;
  int *pointer;
  c = 76;
  pointer = &c;
  cout<<*pointer<

这里,cout<<*pointer<相当于cout<所以结果打印出76。注意,在使用指针变量时,一定要先对其进行赋值,然后才能使用指针变量访问或者改变指向变量的值。

Example 2:

void main(){
  int akey = 0,b = 0;
  int *p = NULL, *q = NULL;
  akey = 66;
  p = &akey;
  q = &b;
  *q = *p;
  cout<<"b = "<

你可能感兴趣的:(可爱的指针(一))