• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 学前教育 > 正文

    [指针:C语言的重要概念和特色] C语言指针

    时间:2019-01-10 03:20:07 来源:雅意学习网 本文已影响 雅意学习网手机站

      摘 要: 指针是C语言的精髓部分,也是C语言的重要特色。本文从指针的基本概念出发,结合具体实例对指针的类型进行了分析,并对指针在实际应用中常出现的问题进行了归类总结,希望对初学者理解“指针”这一重要概念有所帮助。
      关键词: C语言程序设计 指针 数组 函数
      
      指针是C语言中的精髓,它在C语言中被广泛地使用。指针是C语言的一个重要概念,也是C语言的一个重要特色。理解和运用好指针可以灵活方便地处理程序中各种复杂问题,可以轻松完成其他高级程序设计语言不便完成的任务。
      一、指针的概念
      一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
      指针的引入为系统存取数据提供“直接访问”和“间接访问”。有两个上锁且放着物品的盒子A、B,如果你有A盒子的钥匙,则可以直接打开A盒子将物品取出;如果你有B盒子的钥匙,而A盒子的钥匙在B盒子中,要想取出A盒子中的物品,则必须先打开B盒子,取出A盒子的钥匙,再打开A盒子将物品取出。上面两种情况就是直接访问和间接访问的概念。所谓间接访问,是先访问存放变量地址的存储单元,得到该变量的地址,再对变量内容进行访问。通过指针变量实现对变量的访问方式,称为间接访问。首先要定义一个指针变量,然后将一个同类型变量的地址赋给该指针变量(这时我们称指针变量指向该变量),这样就可以进行间接访问了。间接访问的过程是:由指针变量得到变量的地址,根据该地址找到变量的存储区,再对该存储区的内容进行存取,从而实现了对变量的间接访问。
      指针变量是一种特殊变量。系统为指针变量分配一块连续存储单元不是供其存储数据,而是存储内存地址。因此,指针变量是存储内存地址的变量。在计算机中,把内存区划分为一个一个的存储单元,每个单元为一个字节(8位),它们都有一个编号,这个编号就是内存地址。
      注意:1.程序中定义的每个数据在编译后都占有各自的内存区。
      2.数据所占有的存储单元个数是由其类型决定的。
      3.首地址:第1个单元的地址。
      4.表示地址的数与整数的区别。
      二、指针的类型
      1.指向简单变量的指针。指针所指的数据类可以是简单的数据类型。
      例:(1)intp,i;p=&i;意思是指针变量指向整型变量i
      (2)charp,a;p=&a;意思是指针变量指向字符型变量a
      (3)intp,a[10];p=a;意思是指针变量指向数组a
      2.指向数组的指针。指针所指的数组既可以是一维数组,也可以是多维数组。
      例:main()
      {inta[4]={2,4,6,8};
      intp;
      for(p=a;p<a+4;p++)
      printf("%2d",p);}
      分析:指针p指向了a数组的首地址,通过p++来访问a数组的每一元素。
      3.指针数组。指针数组是一种特殊的数组,它每个元素的类型都是指针类型(即地址),其他与一般数组相同。当把某个量的地址放入某元素中后,即可通过该元素对相应的量进行间接访问。数组元素是由指针变量组成的一种指针。定义如:intp[2];指针数组p包含两个元素,每个元素指向一个整型数据。
      例:main()
      {intp[2],i,a[2][2]={1,3,5,7};
      for(i=0;i<2;i++)
      p=a;
      printf("%d\n",(p[1]+1));}
      分析:指针p是一个数组,通过for循环语句给指针数组中的每个指针变量赋值,p[1]的初值为数组a的第二行的首地址,(p[1]+1)便是元素a[1][1],因此程序输出7。
      4.指向指针的指针。指针变量指向的是指针的地址,定义如:intp。
      例:main()
      {inta[2][2]={1,3,5,7};
      intp[2],q,i;
      for(i=0;i<2;i++)
      p=a;
      q=p;
      printf("%d\n",((q+1)+1));}
      分析:指针数组p的各个指针变量指向数组a的各行首地址,q指向指针数组p的首地址,(q+1)等同p[1],如此,((q+1)+1)便等同(p[1]+1)也就是a[1][1],因此程序输出7。
      5.指向函数的指针。指针变量指向函数的首地址,然后通过该指针变量调用该函数。定义如:int(p)()。
      例:intmax(inta,intb)
      {return((a>b)?a:b);}
      main()
      {intmax(int,int);
      int(p)();inta,b;
      p=max;scanf("%d,%d",&a,&b);
      printf("max=%d\n",(p)(a,b));}
      分析:int(p)()表示定义了一个指向函数的指针变量,函数名max代表了函数的入口地址,执行p=max后,p指向了函数max,(p)(a,b)便是通过p调用函数max。
      6.指向文件的指针。C语言对文件的操作并不是直接通过文件名进行的,而是根据文件名生成一个文件指针,通过该指针来对文件进行操作.定义如:FILEfP;(fp为文件指针,此时fp不指向任何文件)。
      7.指向字符串的指针。字符串是一种特殊的一维数组,所以上节中介绍的方法同样适用于对字符串的访问。字符串的特殊性在于:字符串的末尾是结束标志′\0′,所以访问字符串时常用结束标志进行判断。
      三、指针应用中常见的错误
      1.把数据赋给指针变量。指针在使用前必须进行初始化,赋予指针的值必须是地址。
      例:main()
      {inti=6,p;p=6;
      printf("p=%d\n”,p);}
      正确语句:p=&i;“&”是一个取变量地址的运算符。
      2.指针常量运算错误。程序中常量指针是不能被修改的。典型有数组名指针常量和指向字符串常量的指针。
      例:main()
      {inta[5]={1,2,3,4,5},p;p=a;
      printf("%d\n”,(++a));}
      正确语句:printf“(%d\n”,(++p));
      3.指针赋值类型不一致。
      例:main()
      {intp,a[3][3]={{1,2,3},{4,5,6},{7,8,9}};p=a;
      printf(“%d\n”,p);}
      正确语句:p=a[0];或p=&a[0][0];如果一定把a赋值给p,必须先将a转换成整型指针类型。如:p=(int)a;。特别是将多维数组赋值给指针变量时应注意类型匹配。
      注:“本文中所涉及到的图表、公式、注解等请以PDF格式阅读”
    本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

    推荐访问:指针 概念 特色 语言

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章