第二章       指针

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

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

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

       区分*、&的不同。

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

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

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

实例054

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

代码:

#include<stdio.h>
main()
{
  int a[10];
  int *p,i;
  puts("\nPlease input ten integer:\n");
  for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    //将数据导入到数组a中
  printf("\n");
  for(p=&a;p<(a+10);p++)
  //利用数组名a,将数组首地址赋予给指针p;
  //判断指针p的地址是否还指向数组内数据(说实话,这句我都忘了。。。。);
  //指针地址p向后移动一位。
    printf("%d",*p);
    //顺序输出指针指向的数据。
  puts("\n\n 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:\n");
  for(i=0;i<10;i++)
    scanf("%d",&a[i]);
  max=FindMax(a,10);
  //调用函数,数组名a被作为指针而被调用。
  printf("The max number is:%d\n",*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\n",*(p+i));
  }
}

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

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

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

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

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

如果不懂可以私下问我。

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

C语言范例学习02的更多相关文章

  1. C语言范例学习04

    第三章 算法 前言:许多人对算法的看法是截然不同的,我之前提到过了.不过,我要说的还是那句话:算法体现编程思想,编程思想指引算法. 同时,有许多人认为简单算法都太简单了,应当去学习一些更为实用的复杂算 ...

  2. C语言范例学习03-中

    栈和队列 这两者都是重要的数据结构,都是线性结构.它们在日后的软件开发中有着重大作用.后面会有实例讲解. 两者区别和联系,其实总结起来就一句.栈,后进先出:队列,先进先出. 可以将栈与队列的存储空间比 ...

  3. C语言范例学习03-上

    第三章 数据结构 章首:不好意思,这两天要帮家里做一些活儿.而且内容量与操作量也确实大幅提升了.所以写得很慢. 不过,从今天开始.我写的东西,许多都是之前没怎么学的了.所以速度会慢下来,同时写得也会详 ...

  4. C语言范例学习01

    编程语言的能力追求T型. 以前学过C语言,但是只学了理论. 从今天开始,我买了本<C语言程序开发范例宝典>.我要把它通关掉. 这应该可以极大地提升我的编程能力. 第一章 基础知识 这章没太 ...

  5. C语言范例学习06-上

    第六章 文件操作 前言:第五章是C语言在数学上的一些应用,我觉得没有必要,便跳过了.这章正如我标题所写的,是C语言在文件上的操作.学习了这个后,你们可以自行编辑一些所需的快捷程序,来实现一些既定的目的 ...

  6. c语言基础学习02

    =============================================================================涉及到的知识点有:include有两种用法.{ ...

  7. C语言范例学习03-下

    树与图 3.5 二叉树及其应用 PS:二叉树是最经典的树形结构,适合计算机处理,具有存储方便和操作灵活等特点,而且任何树都可以转换成二叉树. 实例101 二叉树的递归创建 实例102 二叉树的遍历 问 ...

  8. C语言课程学习的总结

    C语言课程学习的总结 学习C程序这门课一年了,这是我们学的第一门专业课.在大学里,C语言不但是计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程.所以作为我这个计算机专业的学生来说当 ...

  9. [转]C语言指针学习经验总结浅谈

    指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...

随机推荐

  1. 替换GitBlit的证书为域证书

    GitBlit(当前版本1.6.2,http://gitblit.org/) 是一个Git版本控制的服务端,使用java编写,功能上足够满足基本的版本控制要求,而且部署很简单方便,比如windows上 ...

  2. Linux和UNIX监控

    Linux和UNIX上的数据库监控工具包括监控CPU.内存.磁盘.网络.安全性和用户的监控工具.下面罗列了我们找到的有用工具及其简单描述. ps           显示系统上运行的进程列表 top ...

  3. 如何通过XShell传输文件

    转载孟光孟叔的博客:  https://learndevops.cn/index.php/2016/06/14/how-to-transfer-file-using-xshell xshell目前最好 ...

  4. Linux(Centos)下jdbc连接oracle速度超慢的问题

    最近在centos下写个java swing程序,发现在linux用jdbc连接oracle及其缓慢,还经常失败.但是同样的程序在windows下运行就连接的非常快.网上搜索了很长时间都和我这情况没关 ...

  5. 数据结构 - 归并排序(merging sort)

    归并排序(merging sort): 包含2-路归并排序, 把数组拆分成两段, 使用递归, 将两个有序表合成一个新的有序表. 归并排序(merge sort)的时间复杂度是O(nlogn), 实际效 ...

  6. win7中的画图

    下午做一个图像篡改定位实验,在win7下对图像进行修改,然后通过其最低位判断篡改位置. 程序如何都调试不出来.反复简化程序,发现win7中的画图对图像存在优化. 当更改图像后,会自动调整当前图像的显示 ...

  7. 使用 PSD Validator 在线校验 PSD 文件的质量

     PSD Validator 可以帮助你在线校验 PSD 文件的质量,使用的规则来自 Photoshop Etiquette.Photoshop Etiquette 整理了 PSD 文件的规范,例如删 ...

  8. Linux磁盘操作命令

    查看本地磁盘使用情况:df或者df -l单位为k 容量便于查看,以1024单位换算为M或者G等:df -h或者df -lh 以1000为单位换算:df -H 显示文件系统类型:df -T 显示指定文件 ...

  9. python内置模块(4)

    这一部分是python内置模块系列的最后一部分,介绍了一些小巧有用的内置模块. 目录: 1.random 2.shelve 3.getpass 4.zipfile 5.tarfile 6.bisect ...

  10. HT图形组件设计之道(二)

    上一篇我们自定义CPU和内存的展示界面效果,这篇我们将继续采用HT完成一个新任务:实现一个能进行展开和合并切换动作的刀闸控件.对于电力SCADA和工业控制等领域的人机交互界面常需要预定义一堆的行业标准 ...