第一篇:C语言函数指针变量
C语言函数指针变量
在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为函数指针变量。
函数指针变量定义的一般形式为:
类型说明符(*指针变量名)();其中类型说明符表示现金网96y.org被指函数的返回值的类型。(* 指针变量名)表示*后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。例如:
int(*pf)();
表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。
本例用来说明用指针形式实现对函数调用的方法。
int max(int a,int b){
if(ab)return a;
else return b;
}
main(){
int max(int a,int b);
int(*pmax)();
int x,y,z;
pmax=max;
printf(input two numbers:n);
scanf(%d%d,x,y);
z=(*pmax)(x,y);
printf(maxmum=%d,z);
}
从上述程序可以看出用,函数指针变量形式调用函数的步骤如下:
先定义函数指针变量,如后一程序中第9行 int(*pmax)();定义 pmax为函数指针变量。
把被调函数的入口地址(函数名)赋予该函数指针变量,如程序中第11行 pmax=max;
用函数指针变量形式调用函数,如程序第14行 z=(*pmax)(x,y);
调用函数的一般形式为:(*指针变量名)(实参表)
使用函数指针变量还应注意以下两点:
函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而博彩娱乐棋牌q07i5.org函数指针的移动是毫无意义的。
函数调用中(*指针变量名)的两边的括号不可少,其中的*不应该理解为求值运算,在此处它只是一种表示符号。
第二篇:C语言结构体指针变量作函数参数
C语言结构体指针变量作函数参数
在ANSI C标准中允许用结构变量作函数参数进行整体传送。但是这种传送要将全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。这时现金网96y.org由实参传向形参的只是地址,从而减少了时间和空间的开销。
计算一组学生的平均成绩和不及格人数。用结构指针变量作函数参数编程。
struct stu{
int num;
char *name;
char sex;
float score;
}boy[5]={
{101,Li ping,M,45},{102,Zhang ping,M,62.5},{103,He fang,F,92.5},{104,Cheng ling,F,87},{105,Wang ming,M,58}
};
main(){
struct stu *ps;
void ave(struct stu *ps);
ps=boy;
ave(ps);
}
void ave(struct stu *ps){
int c=0,i;
float ave,s=0;
for(i=0;i5;i++,ps++){
s+=ps-score;
if(ps-score60)c+=1;
}
printf(s=%fn,s);
ave=s/5;
printf(average=%fncount=%dn,ave,c);
}
本程序中定义了函数ave,其形参为结构指针变量ps。boy被定义为外部结构数组,因此在整个源程序中有效。在main函数中定义说明了结构指针变量ps,并把boy的首地址赋予它,使ps指向boy数组。然后博彩娱乐棋牌q07i5.org以ps作实参调用函数ave。在函数ave中完成计算平均成绩和统计不及格人数的工作并输出结果。
由于本程序全部采用指针变量作运算和处理,故速度更快,程序效率更高。
第三篇:C语言字符串指针变量与字符数组的区别
C语言字符串指针变量与字符数组的区别
用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:
1)字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以 作为串的结束。字符数组现金网96y.org是由于若干个数组元素组成的,它可用来存放整个字符串。
2)对字符串指针方式
char *ps=C Language;
可以写为:
char *ps;
ps=C Language;
而对数组方式:
static char st[]={C Language};
不能写为:
char st[20];
st={C Language};
而只能对字符数组的各元素逐个赋值。
从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。
前面说过,当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。但是博彩娱乐棋牌q07i5.org对指针变量直接赋值是可以的。因为C系统对指针变量赋值时要给以确定的地址。
因此,char *ps=C Langage;
或者
char *ps;
ps=C Language;
都是合法的。
第四篇:C语言程序设计实验七:函数、数组、指针
C语言程序设计实验七:函数、数组、指针
1、程序运行后,用户任意输入一个字符串,求出字符串长度,然后输出字符串内容及个 数。不能使用strlen函数。
求字符串长度函数的函数原型必须如下:
int MyStrLenPt(char *str)
若输入:nihao123!
则输出:nihao123!:9 chars2、编写一个对一维数组进行排序的程序。
要求:
写两个函数,一个主函数,一个sort函数。在主函数中完成数组的输入和输出,通过调 用sort函数对数组进行排序。
sort函数的原型为:voidsort(int*p, intn);
说明:
(1)请大家按学号来坐,便于考勤和管理。
(2)请珍惜宝贵的实验时间!不要做与实验无关的事情,比如聊QQ、上网或打游戏。
(3)直接把C语言代码粘贴到相应的实验题目下方,上交实验报告时只交word文档。
(4)文档名称:班级+学号后2位+姓名+实验编号,例如11电1班12张山实验七.doc。
第五篇:变量与函数教学反思
《变量与函数》的教学反思
许小平
通过《变量与函数》的教学,本人对概念课的教学设计与教学实践有了更深入的了解.
本设计呈现的课堂结构为:(1)揭示学习目标;(2)引入数学原型;(3)抽象出数学现实,逐步达致数学形式化的概念;(4)巩固概念练习(概念辨析);(5)小结(质疑).
一、如何揭示学习目标
概念课的引入要考虑学生关心的如下问题:这节课学什么概念?为什么要学这样的概
念?数学源于生活而高于生活,数学概念的引入可从生活的需要、数学的需要等方面引入.初中涉及的函数概念的核心是“量与量之间的特殊对应关系”.本课中,本人在导言中提出两个问题:“引例1,《名侦探柯南》中有这样一个情景:柯南根据案发现场的脚印,锁定疑犯的身高.你知道其中的道理吗?”、“引例2.我们班中同学A与职业相扑运动员,谁的饭量大?你能说明理由吗?”学生对上述问题既熟悉又感到意外.问题1涉及两个量的关系,脚印确定,对应的身高有多个取值;问题2涉及多个量的关系.上述问题,不仅仅是引起学生的注意,更重要的是让学生了解客观世界中量与量之间联系的多样性、复杂性,而函数研究的正是量与量之间的各种关系中的“特殊关系”.数学研究有时从最简单、特殊的情况入手,化繁为简.让学生明确,这一节课我们只研究两个量之间的特殊对应关系.“特殊在什
么地方?”学生需带着这样的问题开始这一课的学习.概念的引入应具有“整体观”,不仅要提供符合函数原型的单值对应的实例,还应提供其他的量与量之间关系的实例(如多个量的对应关系、两个量间的“一对多”关系等),使学生在更广泛的背景中经历筛选、提炼出新的数学知识的过程,逐步领悟“化繁为简”的数学研究方法.当然,这里的问题是作为研究“背景”呈现,教学时应作“虚化”处理,以突出主要内容.
二、如何选取合适的数学原型
从数学的“学术形态”看,数学原型所蕴藏的数学素材应与数学概念的内涵相一致;从数学的“教育形态”看,数学原型应真实、简洁、简单.真实指的是基于学生的生活现实、数学现实,它可以是生活中的实例,也可以是学生熟悉的动漫故事、童话故事等.简洁、简单指的是问题的表述应简洁,问题情境的设置要尽可能简单,全体学生对情境中的问题不应存在太大的理解困难,设计的问题情境要能突出将要学习的新知识的本质.本设计采用了三个数学原型的问题:问题1,“票房收入与售出票数问题”(可用解析式表示);问题2,成绩登记表中的一次数学测试的“成绩与学号问题”(表格表示);问题3,“气温变化与时间问题”(图象表示).这三个问题从不同层面、不同角度体现函数的“单值对应关系”,也都是学生生活中的真实问题,问题简单易懂,学生容易基于上述生活实例抽象出新的数学
概念.由于不少学生在理解“弹簧问题”时面临列函数关系式的困难,可能冲淡对函数概念的学习,故本节课没有采用该引例。对于繁难的概念,我们更应注重为学生构建学生所熟悉的、简单的数学现实,化繁为简、化抽象为形象.过难、过繁的背景会成为学生学习抽象新概念的拦路虎.
三、如何引领学生经历数学化、形式化的过程
“数学教学是数学活动的教学”,面对抽象的数学内容,老师会想方设法创设易于学生理解的数学情境.但如何从具体的实例中提炼出数学的素材、形式化为数学知识是教学的关键环节.从具体情境到数学知识的形式化,需要教师为学生搭建合适的“脚手架”,提出能引发学生思考、过渡到数学形式化的问题.本人在学生完成问题情境的几个问题后,提出系列问题“上述几个问题中,分别涉及哪些量的关系?哪些量的变化会引会另一个量的变化?
通过哪一个量可以确定另一个量?”在与学生的交流过程中把重点内容板书,板书注重揭示两个量间的关系,引领学生经历数学概念的形成过程,引导学生认识为什么要引进变量、常量.由问题1~3的共性“单值对应关系”与“脚印与身高”问题中反映的“一对多关系”进行对比抽象出函数的概念,逐步了解如何给数学概念下定义,并理解概念的本质特征.
四、如何引用反例
学生对概念的理解需要经历一个从模糊到清晰的过程,通过正例与反例的对照,才能准确理解概念的内涵.反例引用的时机、反例的量要恰到好处.过早、过多的反例会干扰学生
对概念的准确理解.概念生成的前期提供的各种量的关系中的实例提供的是一个更为广泛的背景,让学生经历从各种关系中抽象出“特殊的单值对应关系”,从而体会产生函数概念的背景.这样的引入有利于避免概念教学中“一个定义,三点注意”的倾向.
在备课时,我想从“气温问题”中的函数图象引导学生发现时间t取定一个值时,所得T的对应值只有一个,学生习惯性地提出问题“温度T取定一个值时,时间t 是否唯一确定?”全体同学从正反两个方面认识“唯一确定”的含义,在这样的基础上再归纳出函数的定义,学生较好地掌握函数中的单值对应关系.而在班上实际上课时,在概念的形成前期,忙中出漏,没有抓住“气温问题”中的函数图象讲解“唯一确定”,特别是没有从反面(温度T=8,时间t=12~14)帮助学生理解“唯一性”,也没有强化“脚印与身高”反映的“一对多关系”,只在涉及“单值对应关系”的实例基础上引出概念,也跳过后面提到的三个反例,学生在后面的概念辨析练习中错漏较多,为纠正学生的理解花了九牛二虎之力.