• C语言范例学习02


    第二章       指针

    算是重点吧,这也是C语言的特色啊,直接访问物理存储。

    重点:  指针就是一个存放它指向变量地址的变量,好绕口。

           区分*在定义是与引用是的作用。

           区分*、&的不同。

           指针是可以指向另一个指针的。

           数组名也是一个存放地址,换句话说,也可以当指针用。

    这章有意思的实例有这么几个:

    实例054

    问题、逻辑都不重要。只是代码不错。

    代码:

    #include<stdio.h>
    main()
    {
      int a[10];
      int *p,i;
      puts(" Please input ten integer: ");
      for(i=0;i<10;i++)
        scanf("%d",&a[i]);
        //将数据导入到数组a中
      printf(" ");
      for(p=&a;p<(a+10);p++)
      //利用数组名a,将数组首地址赋予给指针p;
      //判断指针p的地址是否还指向数组内数据(说实话,这句我都忘了。。。。);
      //指针地址p向后移动一位。
        printf("%d",*p);
        //顺序输出指针指向的数据。
      puts(" Please any key to quit...");
      getch();
      return 0;
      //最后两句可以不用。具体作用请百度getch()。
    }

    反思:其实指针所指向的地址也都是连续的块儿。所以当确定了其数据类型后,地址所指向的数据空间大小也是固定的。所以,可以利用p<(a+10)这样的语句。

    实例062   使用返回指针的函数查找最大值

    问题:在窗体中输入10个整数后,在窗体中输出这些整数中的最大值。

    逻辑:其实这和早些时候的寻找最大数没什么区别。还是循环判断,外加利用一个temp变量存储最大值。

       但是,这次要使用调用函数。如果还是之前的方法就不行了。因为,你会发现无法将主函数的数据传送给调用函数。这涉及到我们一般定义的数组只在本函数内识别,有效。所以,我们得靠指针。因为指针是可以传递的,它传递的只是一个地址数据。再依靠调用函数识别地址,来获取所需的数据。

    程序代码:

    #include<stdio.h>
    *FindMax(int *p,int n)
    {
      int i,*max;
      max=p;
      for(i=0;i<n;i++)
        if(*(p+i)>*max)
        //判断*(p+i)的值与*max的值的大小关系
          max=p+i;
          //通过地址的赋值,从而获得其指向数据值的改变
      return max;
    }
    void main()
    {
      int a[10],*max,i;
      printf("Please input ten integer: ");
      for(i=0;i<10;i++)
        scanf("%d",&a[i]);
      max=FindMax(a,10);
      //调用函数,数组名a被作为指针而被调用。
      printf("The max number is:%d ",*max);
      getch();
    }

    反思:通过函数调用指针,其实我们可以做很多事情。指针的调用相对其他数据的调用有很多优势,尤其在多个数据处理(如数组)。关于调用函数,我的想法是不要确定形参,这样有利与调用与调试。

    实例070  使用指针的指针输出字符串

    这个2.5 指向指针的指针很重要,这关系到后面一些知识(如:链表)的应用。所以要慎重。

    难倒是不难。

    程序代码:

    #include<stdio.h>
    main()
    {
      char *strings[]={"C language","Basic","World wide","Olympic","Great Wall"};
      //创立指针数组strings,其中每一个元素都是一个指针变量。
      char **p,i;
      //**p其实是*(*p)。代表着指针变量p是指向一个指针变量。*p表示p所指向的另一个指针变量,即一个地址。**p是p间接指向的对象的值。
      //例如:这里*(p+2)就表示strings[2]中的内容,它也是个指针,指向字符串"World wide".
      p=strings;
      //赋值。
      for(i=0;i<5;i++)
      {
        printf("%s ",*(p+i));
      }
    }

    反思:既然**P可以使用,那么***p也是可以使用的,依此类推。理解的方式都是遵循 *运算符都是自右向左结合 这一准则的。同时,调用函数时就当它是一个特殊的数据类型处理即可。

    到这里,这章就没有多少东东了。

    其实,指针本身并不难。理解它就是一个可以指向内存地址的特殊变量类型就行。应用时知道*、&等的利用就可。其他东东见多了就回了。

    重在理解。毕竟这种基础知识不能理解,后面有些代码也许就会很难过的。

    指针的建立、赋值、获取、改变、小技巧。一切就哦了。

    如果不懂可以私下问我。

    (也许有人会觉得没什么料。嗯,其实这个主要是给我自己复习看的。过些日子,我也许会写一些其他东东)

  • 相关阅读:
    初学者--bootstrap(六)组件中的字体图标----在路上(9)
    clearfix的最佳方案----在路上(22)
    css的五种属性值----在路上(21)
    float---浮动带来的影响与清除浮动带来的影响方法----在路上(20)
    form表单 ----在路上(15)
    css中常见的属性-----在路上(14)
    Linux | 管道、重定向命令
    C++ | from_string函数的写法
    C++/C | 关于char* char[] char = new char[n]
    C++内存管理 | 01 C++ memory primitives
  • 原文地址:https://www.cnblogs.com/Tiancheng-Duan/p/5681379.html
Copyright © 2020-2023  润新知