zoukankan      html  css  js  c++  java
  • 简单学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语言中最难应用的部分,不过只要掌握原理,仔细想想,一些基础的问题还是能很容易想明白的。

  • 相关阅读:
    光电缆线路安防综合监控网管运维方案
    5G时代 微波通信网络运维管理系统实施方案
    IT运维管理之NETCONF工具
    新基建 破局大规模数据中心智能化监控运维管理
    智慧工厂工业交换机网络运维管理系统
    智慧轨道交通云联网安防运维集成化管理系统应用方案
    智和网管平台SugarNMS万能命令工具 赋能IT智能运维
    智慧城市综合运维安防监控管理系统方案
    SugarNMS可视化智能运维 赋能数据中心安全管控
    下载时,经常看见ASC、MD5、SHA1等,是干什么的呢?
  • 原文地址:https://www.cnblogs.com/stffer/p/4912615.html
Copyright © 2011-2022 走看看