前言:中文期刊网精心挑选了c语言范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。
c语言范文1
关键词: C语言 指针 函数 数组
“指针”是C语言中广泛使用的一种数据类型,运用指针编程是C语言最主要的风格之一。利用指针可以表示各种数据结构,它与函数、数组的使用和传递数据有密切联系,能方便地访问数组,还能像汇编语言一样处理内存地址,从而编出精致而高效的程序。指针极大地强化了C语言的功能。学习指针是学习C语言最重要的一环,能否正确理解和使用指针是判断是否掌握了C语言的重要标志。但是指针也是C语言最危险的特性,如果使用不当,则很容易指到意想不到的地方,产生错误也很难发现。因此,对于初学者来说,应特别注意指针的应用。怎样才能应用好指针呢?下面笔者以在计算机C语言教学中的体会与大家进行探讨。
一、理解指针
在C语言中任何数据只要定义了,在内存中就是有一定的存储单元的。存储单元就是变量在计算机中的存储地址,指针就是用来表示这些地址的变量。所以简单地说,指针就是地址,变量的指针就是变量的地址,这里还涉及一个概念就是指针变量,所谓指针变量就是用来存放指针(地址)的变量。例如:int a;假设a的地址是2000,而2000又存储在变量point中,那么变量point就是指针的变量简称指针变量,a就是指针变量所指向的变量。很多初学者都存在这样的误区:既然指针放的是地址,而2000正好是变量a的地址,那么对于指针point就可以这样赋值:point=2000,这是错误的,这里的2000表示的不是地址是一个整型数据。所以对于指针变量的赋值只能用取地址运算符“&”进行赋值即:point=&a;&a即为a的地址。
二、指针与函数
指针作为C语言的精华有很多用途,除具有一般的功能外,其中具体特殊功能的应用总结起来有三个方面:一是用于在函数中可以返回多个值;二是可以实现动态调用函数;三是实现数组的动态定义。其中,普通变量作为函数的参数,传递的是变量的值,因此只能带回一个返回值,但在有些场合需要返回多个值,这就必须用到指针做函数的参数,因为指针作为参数传递的是地址,让实参和形参指向同一个变量的地址,N个形参所指向的变量的值改变了,N个实参的值也自然改变了,从而实现了带回多个返回值。这里举个例子,编写一个函数实现两个数从小到大输出。这个程序需要子函数实现两个数的交换,把交换后的两个值通过指针传回主函数输出,传回来的是两个值。所以普通变量做函数的参数是无法实现的,只能用指针作为函数的参数。具体实现:
子函数实现交换:
swap(p1,p2)
int *p1,*p2;
{int p;
p=*p1;
*p1=*p2;
*p2=p;
}
主程序实现调用,输出:
main()
{int a,b;
int *pointer_1,*pointer_2;
scanf(“%d,%d”,&a,&b);
point_ 1=&a;
point_2=&b;
if(a
swap(point_1,point_2);
printf(“%d,%d”,a,b);
}
由此可见,要通过函数调用得到N个返回值可以通过以下三步实现:(1)主调函数中设N个变量,用N个指针指向他们;(2)将指针变量作实参,将N个变量的地址传给形参;(3)通过形参指针变量指向的改变,改变N个变量的值。最后主调函数中就可以得到N个变量的返回值。
三、指针与数组
前面提到任何数据都有存储单元,都有指针。所以,从这个角度出发可以将指针分为:指向变量的指针、数组指针、字符指针、指向指针的指针、函数指针、结构变量的指针及文件指针,等等。其中,指向变量的指针就是存储变量的地址的,这是指针最简单的一种类型。那么一个变量有地址,一个数组有若干个元素,每个元素都有一个地址,所谓数组的指针,就是指数组的名称,实际上是指向整个数组空间的起始地址。数组元素的指针是数组元素的地址。例如:int a[10];int*p;这里的数组名a就是数组的首地址,本质上是一个指针。a[2]表示距离a指向空间向后2个位置所在空间中的存放的值,所以a[2]=*(a+2)。那么如果让p=a,p就是指向数组的指针,对于a我们可以做加减整数运算,利用它表示数组中任何数据的值。那么对于指针也可以通过加减整数运算来表示数组中的任何数据。指针变量加上或减区一个整数n表示把指针指向的当前位置向前或向后移动n个位置。具体移动的字节数和指针数组的类型在内存所占的字节数有关系,如果指针数组类型为整型,在内存中占2个字节,那么,指针p+1,实际上的地址值就是原址加2,对于数组元素来说就是指针向后移动一个元素。如int a[10],*p,*s;p=a;s=p+2;其中s的值表示数组中首地址向后移动2个数组元素的位置,表示a[2]对应的地址,而具体移动的字节数则为4个字节。为了表示两个地址间存在的距离,可以通过指针间的减法实现。指针之间是不能有加法操作的,指针的加减运算只能对数组指针变量进行,对指向其他类型的变量的指针变量做加减运算是毫无意义的。而且两个指针变量之间的运算只有指向同一数组时它们之间才能进行运算,否则运算将失去意义。
四、结语
C语言是到目前为止学习最多的程序设计语言之一,也是国外大学计算机专业唯一的必修课程。在整个C语言教学中,指针是一个十分重要的部分,也是最难掌握的部分之一。本文从对指针概念的理解、指针在函数和数组的使用等方面系统论述了指针,目的是让大家清晰地了解指针、掌握指针,从而高效地应用指针。只有掌握好指针,才能充分发挥C语言的优势。
参考文献:
[1]谭浩强.C程序设计教程.北京:清华大学出版社,2008,11.
[2]陈刚.C语言程序设计.清华大学出版社,2010,2.
c语言范文2
关键词: C语言 程序设计 教学研究
1.C语言的特点
C语言是计算机软件开发领域中流行的程序设计语言之一,它使用灵活、功能丰富、表达力强、生成目标程序质量效率高、可移植性好、语法简洁精妙,很便于描述算法,同时还可以方便直接地控制计算机的底层硬件,使我们能够深入系统底层进行编程,既可用来编写系统软件,也可用来编写应用软件,应用范围很广。其由于功能强大、效率高、简洁灵活和可移植性强的特点,在软件开发领域深受编程人员的喜爱。
C语言由于是理想的结构化语言,同样适合于程序设计教学,所以成为计算机语言教学的主流语言。通过对C语言的学习,可以使学生掌握基本的编程思想,为学习其他编程语言奠定基础。C语言掌握的程度,不仅能直接影响到学生对后继课程的学习,同时对他们以后的学习和发展也起着至关重要的作用。同时,它也是计算机等级考试的主要考试科目。大部分学校采用C语言作为非计算机专业学生计算机等级考试二级语言课程。
2.教学中存在的问题
然而,但从目前的教学情况来看,学生在学习C语言时往往存在着一定的问题,实际掌握的情况并不理想。由于C语言涉及的概念多、规则广、使用灵活,初学者很难掌握,容易出错。对于大多数的初学者,C语言灵活的语法结构使他们望而生畏,繁琐的细节使他们头晕脑张。同时由于缺乏对计算机结构的全面了解,缺乏对计算机硬件尤其是内存结合很紧密的一些概念,学生基本上很难理解和掌握C语言。
(1)课堂教学中没有突出语言本身的特色。C语言作为一门高级计算机语言,和其他计算机语言有很多相似甚至相同的地方,对于已经掌握计算机基础和其他语言的人,就不能再重复这些知识。一些教师对C语言本身的一些特有的概念,尤其指针、链表的应用,强调不够,既浪费了学生课堂上宝贵的时间,又使得学生对新知识理解不深。
(2)没有充分调动学生学习的积极性。在目前的课堂教学中,还是以教师讲授为主,没有充分发挥学生学习的主动性,启发式教学没有得到充分运用。教师不了解学生课前预习的情况,不了解学生的真正需求、难点和问题所在,挫伤了学生学习的积极性和热情。
(3)对于实践教学环节重视不够。C语言是一门实践性很强的计算机语言,但目前的实践课教学存在很多弊端。例如:学生不明确上机实验的目的,实验的内容不清楚,想干什么就干什么,没有相应的实验要求,考核中上机没有一定的比例。这样,语言课就成了单一为了考试的一门课,其结果有的学生连最基本的实践操作也不会做。
3.教学内容及方法的改革
学习程序设计不仅是为了掌握一种开发工具,更重要的是用计算机解决问题。因此在教学过程中,教师应改革传统的语法学习内容,将算法教学融入到语言教学中,通过实例由浅入深,使学生在解决具体问题的过程中掌握算法的精髓[2]。
在实践教学过程中,要对《C程序设计语言》教学内容进行调整和整合。首先,对书上的主要内容――I/O格式、控制结构、指针等内容,采用讲、练结合的方法让学生掌握精华部分,对结构体、公用体、文件等内容采用以学生自学为主、答疑为辅的方式让学生掌握这部分内容。其次,针对学生对语言课程学习的单调性和枯燥特点,采用多种教学方法,并在重点内容的教学上辅以大量的课内习题课和课外练习方式,让学生牢牢掌握基本内容。再次,让学生做针对性很强的练习来加强学生的理解。最后,对学生在作业过程中暴露的主要问题集中解决、个别问题单独解决,以此来弥补个体差异,同时兼顾到大多数学生的利益。
在教学过程中,要坚持“结构化程序设计”原则。所谓结构化程序设计,是组织人的思维,以便在合理的时间里,将计算任务用较容易理解的方式表示出来。结构化程序设计方法的基本思路是,把一个复杂的问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。因此,在学生初学程序设计时,这一方法可以养成良好的思维习惯。在教学中,应当向学生强调这样的几点:第一,程序质量的优劣首先取决于程序模块结构的清晰度,要按照一定的标准、一定的原则、一定的风格设计。第二,结构化程序的三种基本结构:顺序、分支、循环,它们是构成程序的基本单位。如果在程序中,所有的模块都只使用这三种单入口、单出口的基本控制结构,那么,不论程序包括多少模块,也不论一个模块包含多少个基本控制结构,整个程序仍然能够显示清晰的流程,这就实现了程序语言的“结构化”。第三,结构化程序设计的基本方法是自顶向下、逐步细化、模块化设计、结构化编码。逐步细化总是和自顶向下结合使用,一般也把逐步细化看作自顶向下的具体表现。
4.加强实验环节,注重学生动手能力的培养
C程序设计是一门实践性很强的课程,要把学生在课堂上所学的知识在计算机上用程序设计反映出来,必须加强实验环节的教学,强化实验能力和学生的动手能力[3]。为此要做好以下几点:
(1)编写符合学生实际情况的实验讲义,注重学生综合实验能力的培养。
(2)每一堂实验课前,检查学生的实验预习报告,了解学生的预习情况,并对本次实验内容提出具体的要求,在实验课结束前对实验中存在的问题进行总结。
(3)加强实验环节注重学生动手能力培养。
在实验教学过程中注意培养学生的动手能力、独立科研能力及合作精神,绝不允许“一人动手大家看”这种“放羊式”现象出现。学生在做完实验后都由教师检查其结果,打分后方可离开,凡无结果或结果不理想者,必须补做或提供条件让其重做,促使学生在实验中勤动手,也使学生们具有成就感。对于部分综合型的实验尤其强调分工合作,实行小组长负责制,争取小组成员一起协调配合完成。
5.改进考核方式
采用书面考试、上机考试、课程设计相结合的方式全面考核。计算机语言课的实践性决定了它不要求学生死记硬背各种语法规则和语句格式,而是要求学生在解决实际问题的过程中掌握程序设计方法,提高逻辑思维能力。因此,计算机语言课的考核宜采用书面考试与上机考核相结合的方式,辅之以对课程设计情况的考查。书面考试可以侧重对基本概念的理解和掌握方面,编程题目的涉及面可以较宽,以考查学生对基础知识的掌握情况。上机考核可以让学生在规定时间内对给定的程序设计题目编出程序,并在机上调试通过,题目可以是基础知识的综合运用,这样可以考查学生的综合应用能力和快速编程能力。课程设计的具体做法可以结合实验课,将学生分成若干小组,每组布置一个稍大的有实际应用背景的程序设计题目,组内分工各人完成一部分,再由其中一个人负责完成联合调试任务。通过对课程设计情况的考查,了解学生运用语言解决实际问题的能力和协作编程的能力。
6.结语
以上是本人在C语言教学过程中的几点体会,现总结出来,谨供各位同行参考,不当之处,敬请指正。教师需要在教学过程中不断总结,在教学方式、教学方法、课题设计等方面进行探索,为C语言课程建设积累经验,促进计算机语言教学学科的建设。
参考文献:
[1]谭浩强.C程序设计[M].北京:清华大学出版社,2001.
c语言范文3
2比喻通俗易懂,具有延伸性列举实例要通俗易懂,引用生活中的简单事物阐述C语言复杂的知识点,同时,考虑到知识点的连贯性,比喻对象也需要具有延伸性,方便学生在已有知识的基础上接受新内容。案例:“数组概念”的讲解。“在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来,这些按序排列的同类数据元素的集合称为数组。”乍看起来很抽象,但是如果通过形象比喻,学生就会很清楚。用“客栈房间”作比:当定义了intarray,表示在内存中开辟了10个连续空间,下标从0~9;只能存放int数值。就好比在客栈定下了10个房间,门牌号从0开始一直到9,然后客人依次入住;客人的身份也有一定的要求,只能是int型的客人才能入住。由此,学生掌握了使用数组需要注意的细节。当教师提出array元素是否存在时,学生能够迅速联想到号码为10的房间不存在,由此顺利延伸出“越界”的概念。同时通过这个事例,学生对一维数组的理解直观清晰,在此基础上加以延伸,使得二维数组讲解也取得了比较好的教学效果。
3比喻生动有趣,寓教于乐利用学生感兴趣的话题,生动形象地打比方,用幽默的语言,形象的比喻,激发学生学习兴趣,让抽象的代码变成生动的故事情节,从而达到让学生熟练编写代码的目的。案例:“在有序数组中插入元素”的讲解。转化为陈述《武林外传》中一个故事情节:同福客栈佟掌柜规定,伙计需按年龄由小到大的顺序,依次安排房间入住。老白、郭芙蓉、李大嘴、吕秀才已按要求住下多日,现有年龄为20岁的祝无双到来,要插入其中,想保持原来顺序不变,该如何操作?(表2)故事讲完了,令学生困扰的代码结构也搭建完毕,在此基础上稍加完善,完整的代码就诞生了。学生在课堂上体现了极大的热情,以重现故事过程的形式,完成了代码的编写,在轻松愉悦的气氛中掌握了数组的实际应用。
4比喻对象拟人化,突破知识难点C语言编程有很多固定格式和要求,诸多规范贯穿在这门课程当中,显然死记硬背只会削弱学生的学习热情。此时,可以把基本规范拟人化,让每一个规范都变得生动,让每一段代码都富有生命。案例:“主函数与非主函数间调用关系”的讲解。
5以“公司老板和员工的关系”作比(公司老板—主函数、员工—非主函数):(1)公司的运行,应由老板下达命令;(2)老板可以吩咐员工做事,反之不行;(3)员工之间可以相互帮忙。转化为函数的概念,即:(1)程序需从main函数开始执行;(2)主函数可以调用非主函数,非主函数不能调用主函数;(3)非主函数之间可以相互调用。利用拟人比喻,学生再也不会把相关概念记混淆,拥有清晰的思路,就能够编写出正确的代码。5比喻深入到应用,激发学习动力通过形象的比喻,把C语言在工作生活中的重要性、实用价值阐述给学生,培养学生学习的主观能动性。
c语言范文4
关键词:C语言;IT;程序设计语言;优势
众所周知,C语言是1972由美国的Dennis Ritchie设计发明的,自今仍是国际上广泛流行的计算机语言,一般用来写系统软件,应用软件等。例如,Linux,DBASE IV等著名的系统和软件就是用C语言编写的。所以,学习C语言还能够让初学者深入了解程序底层和操作系统。
1 C语言的特点
首先,C语言的结构简单,编写程序效率高,便于描述算法。其次,表达方式灵活实用,语法接近英语,关键字如if,else,switch,break等。第三,C语言的数据结构和运算符丰富,共34种运算符,整形,实型,字符型,数组型,指针型,结构体型等数据类型。第四,可移植性好,C语言的设置一般为3-5MB,非常易于安装和操作。第五,C语言是一种结构化程序设计语言,这种结构使程序调试和维护更加简单。最后,随着计算机技术的发展,很多新的程序设计语言都是以C语言为基础发明的,学习C语言可以更方便的掌握其他Z言。
2 C语言的内容
C语言的内容一般分为:第一,C语言的运算符与运算顺序,是学习C语言的基础。第二,C语言的顺序,选择,循环结构,是C语言的三个基本结构,组成程序最基本的框架。第三,数组,数组就是一个同类型元素的集合。第四,函数,函数是C语言源程序中的基本模块,一般分为库函数和用户定义函数。第五,指针,指针是C语言中广泛使用的一种数据类型,是C语言的精髓,是检验我们是否掌握C语言的标准。第六,结构体与共用体,一般使用结构体存放一组不同类型的数组。第七,文件,C语言中把文件当做一个“流”,并按字节进行处理。
3 C语言的优势
3.1 C语言在工业控制领域中广泛使用
大到操作系统,小到网页浏览器,小游戏一般都是由C语言,或与C相关的编程语言编写。并且,它也是最被人们广泛使用的可编程嵌入式处理器语言,由它编写的嵌入式处理器,可以控制汽车,机器,交通灯,玩具以及家用电器,与我们息息相关。因此掌握了C语言,会有诸多实践创作的同时,还会了解其工作原理。
嵌入式系统是指软,硬件可以裁剪且适用于应用系统对其功能,成本,体积功耗等有着严格要求的专用计算机系统,与单片机相似,依赖于汇编语言编写的程序。但由于C语言的出现使得嵌入式系统开发变得简单。由于C语言灵活的语言结构比汇编语言编程更人性化,可以程序与硬件更好的结合,可以忽略一些不必要的细节,从而更专注功能和算法,使控制系统开发变得高效,而且C语言的可移植性和可读性都比汇编语言好。C语言的结构模块完善,其良好的程序结构十分适合模块化的程序设计,因此运用C语言设计控制系统程序时,充分发挥其模块化程序优势,将其功能模块化,不同的模块完成不同的功能。使得控制系统的结构清晰,也便于调试和维护。所以,C语言在开发嵌入式系统和单片机的效率上提高很多,甚至直接影响了科技的发展。因此,C语言在硬件方便不仅应用广泛而且扮演着十分重要的角色。
3.2 C语言在软件工程中的应用
C语言是一种高级语言,能狗直接访问硬件的物理地址,进行位操作。还有一些汇编语言的特点,可用来编写系统软件和开发应用软件,作为一种通用的程序设计语言,在软件工程的开发中收到广泛关注。
由于C语言既有高级语言又有低级语言,两者有效的结合编程工作单元,和对函数的合理应用,能够有效提高系统的层次性和清晰度等方面。C语言自身的优势也很重要,运算符和数据类型十分丰富,可移植性好,方便调试和维护等。对于软件工程来说,需要C语言编写程序满足多元化需求,能够实现相对复杂的数据运算任务,而C语言具有灵活性和实用性,能够通过指针对位地址,字节地址进行操作。运用C语言编写程序,不仅高效而且多种机型和操作系统支持C语言,帮助人们直接访问地址,及时检查和提示我们语法错误。既保证系统质量高,效率高,又为其更好的移植和修改奠定基础。同时可以和汇编语言完美结合,在系统编程中能够进一步发展。另外,C语言还具有强大的图形功能,不仅支持多种显示器和驱动器,且计算功能和逻辑判断功能强大。
3.3 C语言是大多数编程语言的基础
由于C语言的功能强大,随着计算机技术的不断进步,便出现了以C语言为基础的新的跨平台的程序设计语言和脚步语言,如我们所熟悉的C++,C#,JAVA,PHP,Python,ObjectiveCC等,都是通过C语言衍生出来的,引用了C语言中大量的语法和功能,借鉴了C语言的优点,这些语言都使用相似的操作符,表达式,控制结构,数组,函数等。几乎所有的大众程序设计语言都能与C语言连接,同时也能利用大量的C语言库。其中,这些语言的许多模板也是由C语言所写。所以,掌握了C语言不仅可以编写系统源代码,也可以使你更有效的学习其他脚本语言或程序设计语言。
4 结语
虽然C语言是在20世纪90年明的,但是在今天,它的应用范围依旧广泛,无论是软件开发还是硬件处理器的编程,它的地位依然重要。C语言不仅是现代信息技术和计算机科学的基础,还是大学最常用的程序设计语言之一,C语言对计算机的基本工作原理和软件开发都有详细说明,我们也可以通过学习C语言去更加深入地了解到编程的原理,掌握C语言还能为你对其他程序设计语言的学习打下基础。因此,C语言的重要性极其存在价值,不只是它的历史久远,还有它的经典和实践中的作用。所以作为有创新意识的新型人才,一定要认识到C语言的重要性,并且在实践中熟练运用。
参考文献:
[1] 赵黎,范君君. C语言编程技巧在C语言学习中的应用研究[J].信息与电脑(理论版),2014(09):252.
c语言范文5
关键词:C语言;指针;数组;地址
地址:在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。为了避免混淆,我们中约定:“指针”是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元,在C语言中,一种数据类型或数据结构往往都占有一组连续的内存单元。用“地址”这个概念并不能很好地描述一种数据类型或数据结构,而“指针”虽然实际上也是一个地址,但它却是一个数据结构的首地址,它是“指向”一个数据结构的,因而概念更为清楚,表示更为明确。这也是引入“指针”概念的一个重要原因。因为数组或函数都是连续存放的。通过访问指针变量取得了数组或函数的首地址,也就找到了该数组或函数。这样一来,凡是出现数组,函数的地方都可以用一个指针变量来表示,只要该指针变量中赋予数组或函数的首地址即可。这样做,将会使程序的概念十分清楚,程序本身也精练,高效。
1 指针
所谓的指针,本质上就是地址。指针变量的值,就是地址的值,当取值运算时就是到对应的内存地址上,依照指针类型进行取值。指针是一个地址,指向的是个类型:我们知道,c语言中的类型有int,char,bool(这个不常用),一般我们使用int,char就可以满足一般的类型需求的,如果对于变量的长度过大,就是用long,float,double,关于各个类型使用的长度问题,可以使用sizeof(int)或者sizeof(long)来查看各个类型,在系统中的小。
而指针就是一个8个字节(64系统)。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。图中,设有字符变量C,其内容为“K”(ASCII码为十进制数75),C占用了011A号单元(地址用十六进数表示)。设有指针变量P,内容为011A,这种情况我们称为P指向变量C,或说P是指向变量C的指针。严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。为了避免混淆,我们中约定:“指针”是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。
指针指向的是地址,地址指向的是内容:
我们需要一个变量,来存储地址,这个变量的值是地址,但是我们可以通过修改变量的值,来不断地改变地址,但是,我们如果需要改变该个地址的值的话,就需要,对地址的值进行修改,而不改变地址。
inta=10;
int*p;
p=&a;
*p=11;
a=?
这里我们看到,p是一个变量,我们使用p来存储变量a的地址,这是,我们使用*p对于这个变量进行赋值,那么a的值最后,是多少呢,结果是11,因为我们使用*p赋值,就相当于a=11,赋值效果一样的。
指针的指针,是面对于指针的变量:
我们说,指针的指针的时候,就有点不清楚了,到底怎么区分指针和指针的指针呢?
char*p;
char**pr;
pr=&p;
我们这样看就清楚了一点,char*(*pr);*pr是一个存储的值为指针的变量,pr就是存储上个变量地址的变量。整合起来就是,pr是一个存储的值为指针的地址的变量。这样,我们就基本,对于指针有一个直接的了解了。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。内存单元的指针和内存单元的内容是两个不同的概念。
2 指针的类型指针的类型
从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:
第一,int*ptr;//指针的类型是int*。
第二,char*ptr;//指针的类型是char*。
第三,int**ptr;//指针的类型是int**。
第四,int(*ptr)[3];//指针的类型是int(*)[3]。
第五,int*(*ptr)[4];//指针的类型是int*(*)[4]。
3 指针指向的类型
从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:
第一,int*ptr;//指针所指向的类型是int。
第二,char*ptr;//指针所指向的类型是char。
第三,int**ptr;//指针所指向的类型是int*。
第四,int(*ptr)[3];//指针所指向的类型是int()[3]。
第五,int*(*ptr)[4];//指针所指向的类型是int*()[4]。
4 指针变量与变量指针
常量指针:该指针是一个常量,不可改变,指向某个地址之后就不能改变了,但他所指向的单元是可以改变的,很容易与指针常量弄混,所以一般读的时候读成常量指向,从字面上看就是一个常量指向某个地址。指针常量说明该指针所指向的是内容不可改变,但其自身是一个变量,可以改变指向的内容,读的时候读成指向常量,从字面上看就是指向某个常量。
5 C语言指针的作用
指针可以直接操作内存,理解为直接操作内存的优点有哪些。
第一,效率更高,这个很容易理解,直接操作内存,效率必然更高。
第二,可以写复杂度更高的数据结构,这个也好理解,程序员可以操作内存,当然可以写出灵活、复杂的数据结构。
第三,编写出简洁、紧凑、高效的程序。
6 结语
C语言是一种面向过程的程学设计语言,在代码量超过一定大额数额后程序设计的效率会明显下降,这是它相对于其他的面向对象的程序设计语言的缺点,但是它的优点是可以比其他的语言更加的接近于硬件底层,这种特性直接导致它可以用来设计计算机操作系统,Unix就是它的产物!所以说C语言有着其他的语言不可替代的功能,既有缺点,也有优点。
参考文献:
[1] 梁冯兰.对C语言中指针的探讨[J].和田师范专科学校学报,2006,26(5).
[2] 许晶. C语言中指针运用与探索[J].中国科教创新导刊,2013(23).
作者简介:李帅(1997―),男,湖南衡阳人,沈阳理工大学学生。
c语言范文6
Abstract: The pointer is the essence, focus and difficult of C language which is also the basis of C language Series. This article describes the arithmetic rules of pointer constants and variables in C language, as well as the access to the address.
关键词: 指针;地址;数组;运算
Key words: pointer;address;array;operation
中图分类号:TP312 文献标识码:A 文章编号:1006-4311(2014)11-0214-02
1 绪论
C语言的精华是指针,程序设计的关键也是指针,使用指针的难点是指针的运算。用指针访问数组元素,相对比较抽象,故本文用简单的自然语言予以浅析。
2 指针变量的概念
2.1 内存地址:内存中存储单元的编号 内存中,有众多的存储单元(单位:字节)。为了区分不同单元,必须为每一个单元编号,这个编号就是存储单元的“地址”,就像电话很多,为了区分每一部电话,必须为其编号,该编号就是电话号码。每个单元有且仅有一个惟一的地址。单元中存放数据,注意区分单元的地址与单元中的内容(数据)。
2.2 变量地址:该变量在内存中的起始地址 变量名是单元的外部名字(用户命名),单元号是单元的内部名字(系统命名)如 int x 假设整型变量是2个字节,系统分配的存储单元为 100 和101,则首地址100就是变量x在内存中的地址。
直接访问──直接利用变量的地址进行存取。
如:把“书”送给“张伟”就是直接访问。
间接访问──通过另一变量访问该变量的值。
如:把“书”送给“张伟他哥”就是间接访问,先间访“张伟”,知道他哥的地址,再按此地址送“书”。
2.3 指针变量
指针:即地址,存放地址的变量称为指针变量。
指针变量定义格式:数据类型 *指针变量[, *指针变量2……];
取地址运算的格式: &变量
例如
main()
{int x,*p; /*整形的指针的p单元
P=&x;
X=10;
*p+=20;
Printf(“%d,%d\n”,x,*p);
} 程序运行结果是30,30
3 数组的指针和指向数组的指针变量
3.1 数组的指针 数组元素在内存中连续存放,数组名代表数组首地址,是一个地址常量。
3.2 指向数组的指针变量的定义
例如,int a[10], *p=a(或&a[0]);
或者:int a[10], *p;p=a;
3.3 数组元素的引用
3.3.1 按名存取 有 int a[10],*p=a;定义,则p=a,一个数组,两个名字p和a,访问元素时用a[i]或p[i]。
3.3.2 按地址存取 有 int a[10],*p=a;定义,则:p+i和a+i都是数组元素a[i]的地址,访问元素时用*(p+i)和*(a+i)。按地址存取:*(p+i),*(a+i),按名存取:a[i],p[i]四个是等价关系。
注意:①p+n指向数组的下n个元素,而不是简单地使指针变量p的值+n。编译时为p+n*m。m为一个元素占用的字节数。②指针变量:既然是变量,其值随时在变,必须注意其当前值,否则容易出错。③指向数组的指针变量,可以指向数组以后的任何内存单元,C语言不做越界检查,这些单元不是系统分配的单元,强占资源,易导致死机。④int a[10],*p=a;p++对,a++错,a常量,p变量。
3.3.3 指向数组的指针变量所支持的运算 地址加减数值等于新地址,除此以外运算没有意义,由此得出推论,指针支持的运算有:
算术运算:指针变量±整形数据、指针变量-指针变量=整型数值,该数值表示两指针之间的数据个数,并非地址之差。
关系运算:指针变量 关系运算符 指针变量,表示两个变量值的大小关系,谁在前谁在后。
4 二维数组的指针及其指针变量
4.1 二维数组的指针 有定义语句: int a[3][4];
①从二维数组角度看,数组名a代表数组的起始地址, 是一个以行为单位进行控制的行指针,由一维数组构成的一维数组就是二维数组,a+i是行指针值,指向二维数组的第i行。*(a+i)是列指针值,指向第i行第0列。*(*(a+i)):数组元素a[i][0]的值。用a作指针访问数组元素a[i][j]的格式:*(*(a+i)+j)。②int a[3][4],b[4];由定义可看出,a[i]相当于数组名b,故a[0]、a[1]、a[2]分别表示第0、1、2一维数组的名字。③赋值:行指针变量=二维数组名或行指针变量。
4.2 行指针变量定义格式 数据类型 (*指针变量)[n];
4.3 二维数组元素的访问 int a[5][4],(*P)[4]=a;和int b[4],可以看出,b相当于a[5],第i行的一维数组名是a[i],元素地址±数值=元素地址,行地址±数值=行地址,a+i,a[i],*(a+i)其值相等,但a+i是行地址,a[i],*(a+i) 是元素地址。
①按名存取:a[i][j]或p[i][j]
②按地址存取:(*a[i]+j), *(*(a+i)+j), (*p[i]+j), *(*(p+i)+j)
5 动态数组的实现
静态数组:编译阶段确定数组的大小,运行阶段不能改变数组大小。缺点是事先无法准确确定数组的大小,太小不满足处理需要,太大浪费内存空间。
动态数组:运行阶段,根据实际需要动态确定数组的大小。
在C语言中,可利用内存的申请和释放库函数,以及指向数组的指针变量可当数组名使用的特点,来实现动态数组。如下程序
#include “alloc.h”
#include “stdlib.h”
main()
{ int *p=NULL, count, i,*q;
scanf(“%d”, &count);
p=(int *)malloc( sizeof(int) * count ); /*申请动态数组使用的内存块*/
if ( p==NULL ) exit(0);
for (i=0; i
for (q=p+ count-1; q>=p; q++) printf(“%d,”, *q); /*倒序显示*/
free(p); /*释放由malloc()函数申请的内存块*/
} 程序功能是键入任意个数据,倒序显示。
5.1 库函数malloc()
①用法:void *malloc(unsigned size)。②功能:在内存的动态存储区分配size个字节的连续空间。③返回值:申请成功,则返回新分配内存块的起始地址;否则,返回NULL。
malloc()函数的返回值是一个无类型指针,但在实际使用malloc()函数时,必须将其返回值强制转换成被赋值指针变量的数据类型,否则出错。
5.2 运算符sizeof
①格式:sizeof(变量名/类型名)。②功能:求变量/类型占用的内存字节数。如sizeof(long)=4。
5.3 库函数free()
①用法:void free(void *ptr)。②功能:释放由ptr指向的内存块(ptr是调用malloc() 函数的返回值)。③返回值:无。
一般情况下,使用malloc()函数申请的内存块,操作结束后,应及时使用free()函数予以释放。特别是在循环使用malloc()函数申请时,如果不及时释放不再使用的内存块,很可能很快就耗尽系统的内存资源,从而导致程序无法继续运行甚至死机。
6 结束语
学习C语言必须掌握指针的概念,以便为以后C系列语言学习打下基础。
参考文献:
[1]谭浩强.C语言程序设计[M].清华大学出版社,2004.