第二章       指针

算是重点吧,这也是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. bss段和data段的区别

    一般情况下,一个程序本质上都是由 bss段.data段.text段三个组成的——本概念是当前的计算机程序设计中是很重要的一个基本概念.而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大 ...

  2. SQL 存储过程入门(事务)(四)

    SQL 存储过程入门(事务)(四)   本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我 ...

  3. truncate/drop表非常慢,怎么办?用硬链接,极速体验

    这个这个,我必须花巨大篇幅,记录下今天清空表记录的英雄壮举,可知道一个drop操作,执行了一下午啊一下午,这是要急出翔的节奏..呵呵,下面开始 我的需求:某表因历史原因,积压了1亿条记录,约占360G ...

  4. Reveal-Plugin-for-Xcode 自动结合 Reveal 进行 UI 分析

    下载地址:https://github.com/shjborage/Reveal-Plugin-for-Xcode 还记得之前我们如何使用 Reveal UI 分析工具进行实时查看 UI 的结构吗?如 ...

  5. ubuntu关闭自动更新、打开 ubuntu 的 apport 崩溃检测报告功能

    菜单栏点 系统 --->首选项 --->启动应用程序 --->更新提示 前面的钩打掉 关闭即可     =========== 打开 ubuntu 的 apport 崩溃检测报告功能 ...

  6. Access“输入的表达式中含有一个无效日期值”

    环境:access2003 + win7 有图有真相: 明显地看到,日期那里显示了“星期X”,问题的根源就在这里... 更改计算机的日期显示设置为不显示星期~ 方法:点击右下角的时钟-点击“更改日期和 ...

  7. [Git] 快速签出与更新所有远程分支.md

    git-fetch 命令从远程仓库复制 heads 和 tags 信息到本地,保存在临时文件 .git/FETCH_HEAD 中以备 git-merge 命令使用. 你可以使用 git fetch 命 ...

  8. 微信公众号开发第二课 百度BAE搭建和数据库使用

    上一节主要是一些准备知识,本课还是准备知识,开发微信也可以不使用数据库,但是要想搭建一些查询类应用,就可能使用到数据库操作,所以本节主要涉及到百度BAE上面的数据库表的创建,插入数据,修改数据,删除数 ...

  9. C# 类型基础

    引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制.复制又分为了浅度复 ...

  10. 【转载】Linux中强大且常用命令:find、grep

    转载自:http://www.linuxeden.com/html/softuse/20130804/142065.html 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find. ...