简单学C——第六天

 

指针

  

   指针是c语言中很灵活的一个内容,当然,灵活的都是较难掌握的。不过,只要理解其实质,学习,运用指针还是一件很轻松的事情的。

   首先理解,1.什么是指针?

   在c语言中,指针也同Int ,double 一样是一种数据类型,int 存放的是一个整型数字,double 存放的是一个双精度的数字,指针存放的是地址。记得老师讲过这样一个形象的例子:指针类似于一间仓库的门牌号。这个门牌号能体现这个房间的具体位置。

   2.指针有什么用?

   因为指针存放的是地址,所以指针能直接访问,传递那个地址上的数据和那个地址,这无疑对于我们下次即将说的  函数 有很大的方便。初步了解指针还是需要自己写几个小程序观察一下,然后就知道了。

   在写程序之前,需要知道怎么用指针。

   因为指针也是一个数据类型,所以它的用法和 int的用法差不多都是一样的。首先,1.定义指针  ,其格式为  数据类型(如 int ,double ,struct) + *标识符; 数据类型的意义是,你现在定义的这个指针所存放的地址是指向什么数据类型的,例如 int *p; 它的意思就是定义一个指向整型数字的指针变量。

   那么,下面就写写小程序探索探索吧。

   code:

 

#include<stdio.h>
int main()
{
   int a; //定义整型
   scanf("%d",&a);
   while(a--)
   {
       int *p;//定义整型的指针变量
       p=&a; //将a的地址赋给指针变量p
       //现在p存放的就是变量a所代表的数在计算机中所存放的地址了
       printf("%d--",*p);//输出p指向的地址存放的内容
       printf("%d
",p);//输出p的地址
   }
}

运行结果:

从上面的代码中可以很明确的看出,指正存放的是变量的地址。那么思考一下,指针的地址又该是多少呢? 把上面程序的最后一个语句的前面加上一句 printf("%d--",&p);  运行之后可以看出是这样的结果。

   可见指针也是需要内存单元去存放的。

  上面存在的还比较陌生的符号再说一下,* 有两种用的地方1.在定义的时候用到,代表定义了一个指针变量,(如 int *p),2.在表达式中出现,代表取内容符号,取得p存放的地址里面存放的内容,(如 *p) 。还有 & ,它被用作取地址符,取得内容所存放的地址,(如 &p)。

  给两个数,交换这两个数,输出这两个数,相信每一位读者都会独立的写出此程序,但是为了麻烦起见,能否通过对地址的操作来交换这两个数呢?当然能。

code

#include<stdio.h>
int main()
{
  int a,b;
  int *p,*q,*w; //定义指针变量
  scanf("%d%d",&a,&b);
  p=&a; //p存放变量a的地址
  q=&b;//q存放变量b的地址
  printf("1:%d %d
",*p,*q);
  //地址的交换,与两个数的交换方式一样
  w=p;
  p=q;
  q=w;
  //此时p存放变量b的地址,q存放变量a的地址
  printf("2:%d %d
",a,b);
  printf("3:%d %d
",*p,*q);
  printf("4:%d %d
",&a,&b);
  printf("5:%d %d
",p,q);

}

运行结果:

还需要提示的是,c语言中的很多东西都是可以镶嵌重叠的,这我曾多次提到,而且指针也不例外  ,比如,你定义了这样一个变量 int **q;这个变量有什么用呢?它与int *p;有什么关系? 前面那个q代表着定义了一个二级指针,它的作用是指向一级指针的地址,如   q=&p; 把一级指针p的地址赋给二级指针 q。同时三级,四级都是一样的道理,只要记住指针保存的是地址,地址的内容与它所对应的数据类型有关。

指针被称为c语言中最难应用的部分,不过只要掌握原理,仔细想想,一些基础的问题还是能很容易想明白的。

原文地址:https://www.cnblogs.com/stffer/p/4912615.html