C语言指针的理解与运用

来源 :网络科技时代 | 被引量 : 0次 | 上传用户:xiaozhenying
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘 要】指针是c语言中广泛使用的一种数据类型,运用指针编程是C语言的主要风格之一。利用指针变量可以直接对内存中各种不同数据进行快速处理,理解和运用好指针可以编出简洁明快、性能强的C程序。
  【关键词】C语言 指针 地址
  
  指针是C语言中一个特殊的数据类型,也是最重要的基本概念之一,理解和运用好指针可以灵活方便地处理程序中各种复杂问题,可以轻松完成其他高级程序设计语言不便完成的任务。
  1.指针的概念
  在C语言中允许用一个变量来存放指针,这种变量称为指针变量。一个指针变量的值就是某个内存单元的地址或称为内存单元的指针,一个指针变量可以被赋予不同的指针值。定义指针的目的是为了通过指针去访问内存单元。
  指针变量的定义形式:类型说明符*变量名;其中*表示一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量的数据类型。
  指针变量同普通变量一样,使用不仅要定义说明,而且必须赋值,未经赋值的指针变量不能使用,否则会造成系统混乱,甚至死机。(1)把一个指针变量的值赋予指向相同数据类型的指针变量(int a,*pa=&a,*pa;pb=pa;)。(2)把数组的首地址赋予指向数组的指针变量(int a[5],*pa;pa=a;或者pa=&;a[0];)。(3)把字符串的首地址赋予指向字符类型的指针变量(char *pc;pc="c language";/ char *pc="c language")。这里存放的是该字符串的首地址装入指针变量。(4)把函数的入口地址赋予指向函数的指针变量。int(*pf)();pf=f;/*f为函数名*/。但是如果把一个数赋予指针变量,如int *p; p=1000是错误的;此外被赋予的指针的变量前不能加*说明符,如*P=&a也是错误的。
  2.指针所指向的类型
  当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。如:int*ptr;//指针所指向的类型是int型;int**ptr;//指针所指向的类型是int*型。说明:指针的类型和指针所指向的类型是两个概念,把与指针搅和在一起的“类型”这个概念分成“指针的类型”和“指针所指向的类型”两个概念,是精通指针的关键点之一。
  3.指针的值
  指针的值是指针本身存储的数值,这个值将被编译器当做一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。如果说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域,如果说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。指针所指向的内存区和指针所指向的类型是两个完全不同的概念,如果指针未初始化,它所指向的内存区是不存在的,或者说是无意义的。
  4.指针的自加减运算
  指针加减整型表达式n,仍得同类型指针;运算规则是地址值增减n倍对象类型长度。如:long a[]={1,2,3,4},*p=a;p=a+2; /*p指到a[2] 即p=&a[2]; */p++; /* 相当于p=p+1; */。特殊表达式*p++; 和 *p--; 运算是先取用对象,然后p自加减1;++*p;与 *++p; 完全相同。--*p;与*--p;完全相同。
  5.指针作为函数参数
  在C语言的函数调用中,所有的参数传递都是使用“值传递”,如果在被调用函数中改变了形参的值,对调用函数中的实参没有影响。一般变量作函数参数时,主要通过函数中的return语句,将一个函数值带回到调用函数,如果想要得到几个返回值,必须通过全局变量。使用指针作为函数参数,就可以通过函数调用改变调用函数中指针所指向的地址的值。
  如:void getptr(int *p,int num)
  { p=(int *)maccol(num*sizeof(int));
  return; }
  void main()
  { int *ptr;
  int k;
  getptr(ptr,10);
  for(k=0;k<10;k++)
  { scanf("%d",&ptr[k]); } }
  这个程序要求的是给ptr动态分配内存,所以当分配了一块的内存,并且这个内存的首地址赋给p,这时候p指向的东西改变了,但没有影响到ptr指针,ptr指针指向的还是它原来的数据,只是p指针的数据改变了。引入一个指针的指针,让p指针指向ptr这个指针,这时候动态的分配的数据块传给*p,这个*p就是ptr,所以给ptr分配内存成功。
  6.指针数组
  数组元素也可以是指针类型,数组元素为指针的数组称之为指针数组。指针数组是一种很有用的数据结构,它使得数组元素可以指向不同的内存块,实现对不同大小的内存块的数据统一管理,编译时,根据数组的大小为指针数组分配相应的内存空间。
  如:#include
  void main( )
  {int a[2][3]={1,3,5,7,9,11};
  int*pa[2], i, j;
  pa[0]=a[0];
  pa[1]=a[1];
  for(i=0;i<2; i++)
  for(j=0;j<3;j++,pa[i]++)
  printf("a[%d][%d]=%d\n",i,j,*pa[i]);
  return;}
  程序中,pa[0]=&a[0]表示将数组a第1行元素的首地址赋给指针数组pa[0],所以也可以写成:"pa[0]=&a[0][0];",使用了表达式:pa[i]++来修改指针数组pa所指向的数据。例如:当i=0时,通过pa[i]++便得到数组元素a[0][0]、a[0][1]和a[0][2]的地址。
  总之,指针是C语言教学的重点也是难点,正确理解和灵活应用指针,能动态分配内存,有效地表示复杂的数据结构,有效而方便地使用数组,编写出简洁的C程序。■
其他文献
【案例背景】  我校地处城乡结合部,学生来源主要由两部分组成:很大一部分是农民工子女,一部分是城市下岗工人子女。学生家庭经济条件比较差,家长忙于生计,无暇顾及孩子的学习,没有能力为孩子提供较好的学习环境。由于学校硬件设施较差、离中心城区比较远,图书馆等相关的社区配套资源也比较薄弱。在这种环境下如何开展研究性学习,是长期困扰我们城乡结合部学校教师的一个问题。下面就语文研究性学习《漫步对联世界》来谈谈
期刊
访谈嘉宾  刘玉玺  山东省安丘市第四中学校长    高友校  山东省安丘市第四中学副校长    记者:刘校长,您作为一校之长,对安丘四中的教育教学改革作何评价?  刘玉玺:从宏观上讲,我校的教育教学改革做到了一个坚持、两个适应。一个坚持就是坚持以人为本,以促进学生的全面发展为目标;两个适应就是适应新课程改革的需要和适应农村高中生存发展的需要。  安丘四中地处农村,生源基础差、办学条件差、学生的家
期刊
《语文课程标准》在评价建议中指出:写作评价“应重视对写作的过程与方法、情感与态度的评价”,要看“是否表达了真情实感,对有创意的表达应予鼓励”。这要求教师面对学生的习作要采取多元化的评价标准,不仅要评价习作的内容,还要评价学生的习作态度;不仅要评价习作是否表达了真实情感,还要看学生的表达是否有自己的个性特点。  《观察日记赏评》一课,是在学生亲身经历了种植豌豆、萝卜种子的过程,连续记了一个星期的观察
期刊
综合实践活动课程需要“教材”吗?如果需要“教材”,它又应该是什么形式的呢?当前对于这个问题,不仅在理论上众说纷纭,各地也出现了不同的做法。这个看似简单的问题背后,隐含着综合实践资源的开发与共享、教师课程意识等问题。    一、不同的声音    1.纲要:学校是综合实践活动课程资源开发的主体  在《综合实践活动课程指导纲要》第三部分内容领域中有这样一段话:综合实践活动是由国家设置、地方指导和学校根据
期刊
一、成立课题小组    课题组所在班级:温州市第二十一中学高一(9)班。课题组长:陈卫忠;课题组成员:黄嗣瑞、林建、虞丽洁、樊剑艺、叶茜茜。  主导课程:历史、语文;相关课程:地理。  指导教师:赵庆东。    二、课题的确定——从破解争议入手    常听人说刘基的故乡是青田,电视剧《刘伯温传》在文成开拍,因此又有人说文成是刘基的故乡,刘基的谥号为“文成”,刘基的故乡存在不同说法引起大家探究的兴趣
期刊
随着教育在变革中的不断前行,“园本研修”像一颗石子那样投入平静的水面,激起阵阵涟漪,宜川第一幼儿园也开始以改革者的责任感、使命感来看待一系列摆在面前的发展问题。在近年来的园本研修实践中,大家充分认识到:园本研修的主体是教师,课程实施的关键也是教师,那么在信息技术高速发展的现代社会,如何以信息技术为载体,推动园本研修的有效开展,使园本研修焕发持续发展的活力,是提高教师专业化水平,适应现代教育发展的一
期刊
深圳市翠园中学是广东省一级学校,广东省现代教育技术实验学校,深圳市首批通过国家级示范高中的初期督导评估的学校。近些年,在教育教学各方面取得辉煌的成绩的同时,学校的信息技术普及应用工作,在中央、省、市、区电教馆等上级领导的大力支持下,也取得了突出的成绩。(图1)    一、打造优越的学校信息化技术环境    二、科研为纲,拉动全校信息技术的普遍提高    主要有(大都已结题):  1.中央电教馆国家
期刊
【案例】  片段一:  出示下图:      师:每个小方格是1平方厘米,你能说出每个涂色的三角形的面积吗?先自己想,随后在小组中交流。  学生讨论后汇报结果,并说出各自的方法。  生1:我是用数格子的方法。  生2:我是用平行四边形的面积÷2得到的。  师:为什么可以用“平行四边形的面积÷2”求出每个涂色的三角形的面积?三角形与平行四边形究竟有怎样的关系?三角形的面积又应当如何计算?今天继续运用
期刊
李 璐 编译 陕西师范大学    信息技术在教育中的应用深受全世界教育者的普遍关注。但是,文化对信息、交流和学习系统的设计、使用及管理有着重要的影响。东、西方的教育者基于不同的目的在不同的教学文化中合作、使用技术。虽然文化差异是尖锐的,但是多种多样的文化差异能够帮助我们理解相互之间的约束,帮助我们发展一种在文化上能够适应学习技术革新的方式。    一、东方传统教学文化的特点    扎根于孔夫子思想
期刊
语文教学面对的是涌动生命灵性的儿童,他们是思想上、精神上、人格上相对独立的人。他们有自己的感动、诠释、情怀和梦想。课堂中,我们应尊重儿童的原始表达,让其真情流露;应尊重儿童的语文世界,体会其语言的真意。让他们的个性在阅读教学中尽情飞扬,让他们的个性化阅读之树在阅读教学中茁壮成长。    一、让个性化阅读之树在民主平等的土壤中茁壮成长    民主平等,意味着教师应迅速走出“师道尊严”的观念,亦师亦友
期刊