更全的杂志信息网

指针中两对易混淆概念的对比分析

更新时间:2016-07-05

1 数组指针与指针数组的对比分析

数组指针是指向数组的指针,通常指向二维数组的行指针,其定义格式为:“类型名(*指针变量名)[数组长度];”[1],例如,“int(*p1)[5];”p1为指向含有5个元素的一维数组的指针变量。而指针数组是指数组中的每一个元素都存放一个地址,其定义格式为:“类型名 *数组名[数组长度];”[1],例如,“int*p2[5];”定义了一个指针数组p2,它由5个指向整型数据的指针元素组成。两者定义上只差一对圆括号,但含义相差甚远。

1.1 用标识符含义理解

数组指针变量定义为“int(*p1)[5];”因为方括号“[5]”前面 (*p1)不是合法的标识符,因此(*p1)[5]不是数组,又因p1前面有“*”,则p1是一个指针变量,又因后面有方括号“[5]”,即可判断p1是和数组有关的指针变量,表示p1是一个指向包含5个元素的一维数组的指针变量[2]。而对于指针数组变量的定义为“int*p2[5];”因为方括号“[5]”前面 p2 是合法的标识符,因此,p2[5]是一个数组。又因前面有“*”,即可判断p2是和指针有关的数组,表示p2是包含5个存储单元的一个指针数组,且每个存储单元存储的都是整型地址。

岩白菜素对照品(批号:111532-201604,纯度:94.1%)、毛两面针素对照品(批号:111718-201402,纯度:>98%)均购于中国食品药品检定研究院;乙腈为色谱纯,其余试剂均为分析纯,水为去离子超纯水。

1.2 用运算符的优先级关系理解

数组指针变量定义为“int(*p1)[5];”因为圆括号“()”优先级比方括号“[5]”的优先级高,说明p1是一个指针,指向长度是5的一维数组[3]。而对于指针数组变量的定义为“int*p2[5];”,由于方括号“[]”的优先级比星号“*”优先级高,因此 p2 先与“[5]”结合,形成“p2[5]”的数组形式,然后再与p2前面的“*”结合,表示p2是指向整型数据的指针数组,该数组由p2[0]、p2[1]、p2[2]、p2[3]、p2[4]共 5 个元素组成,每一个元素均为一个指针[3]

1.3 用所占存储空间大小理解

数组指针是一个指针,一般占4个字节;如“int(*p1)[5]”表示定义了一个指针变量p1,p1占4个字节;而指针数组是一个数组,数组中每个元素都是一个指针,是多个指针,其占的字节数由数组本身的长度决定,如“int*p2[5]”表示定义了5个指针,每个指针占4个字节,指针数组p2共占20个字节。

1.4 用与二维数组指向关系的示意图理解

1.4.1 数组指针与二维数组指向关系的示意图

函数指针与指针函数从定义格式上看,仅差一对圆括号“()”,但是它们是两个完全不同的概念。用数组指针和指针数组采用的标识符和优先级方式来分析,函数指针是指针,通常指向函数的入口地址,若用函数指针先后指向不同函数的入口地址,就可对不同的函数进行操作,但注意函数是一个整体,不能把函数指针进行自加、自减运算而指向函数的某一条指令。而指针函数是函数,与一般函数定义不同的是在函数名前面加了“*”,表示函数返回的值不再是数据值,而是一个地址。

若对二维数组操作,使指针数组r的三个元素r[0]、r[1]、r[2]分别指向二维数组x的每一行首元素的列地址,其指针数组r中的三个指针变量与二维数组的指向关系,如图2所示。

如:int(*p1)(int a,int b);

图1 行指针p与二维数组的关系

语句⑤定义了指针数组 p,它由3个元素(p[0]、p[1]、p[2]) 组成,并对指针数组 p 进行初始化,使 p[0]的值指向数组“a,p[1]”的值指向数组b,使p[2]的值指向变量c,语句⑨和⑩使指针数组 q 的三个元素(q[0]、q[1]、q[2])分别指向二维数组x的每一行的首地址,即q[0]指向0行0列的首地址,q[1]指向1行0列的首地址,q[2]指向2行0列的首地址,语句11○定义了指针数组r,并使r[0]的值指向字符串“Red”的首地址,r[1]的值指向字符串“Blue”的首地址,r[2]的值指向字符串“Spring”的首地址。

解决办法:(1)使用带指示灯的电源插座,每次使用显微镜之前仔细检查是否接通电源。(2)将电源开关置于闭合状态,指示为“开”字或“ON”字。(3)检查调节电流强度(volume)的旋钮是不是处于最小处(minimum),一般此调节钮都是处于最高档,光源发出白色光。(4)底座光源的灯泡使用寿命较短,工作时间久了会自然损坏,应注意更换灯泡。养成随手关闭光源的习惯,使用前打开,不需预热,间隔5分钟以上不用就要关闭电源。(5)如果使用带延长线电源的插板,宜选用优质品牌,最好带通电开关和指示灯。(6)保险丝烧断,更换保险丝。

指针数组是指数组的每个存储单元都存储地址,若用指针数组对二维数组操作,只要把数组的每个指针变量分别指向二维数组各行的第一个元素即可。如:

数组指针一般是指向一维数组的一个指针变量,也可以指向二维数组每行元素的行地址,因此,可用一个数组指针变量指向二维数组的行地址,然后借助该指针变量对二维数组元素进行引用。如:

图2 指针数组r与二维数组的关系

由图1可知,数组指针p是一个指针,占4个字节,指向二维数组的行地址;图2中,指针数组 r由 r[0]、r[1]、r[2]三个指针组成,共占12个字节,分别指向二维数组各行的第一个元素的列地址。

终于艰难地打妻子的电话,还没来得及说话,她说:“老公,我怀孕了。”他说:“真的呀,我真高兴。”挂了电话,半晌,泪落下来。哪里有什么不肯罢手,有时候人真的是要认命。他和方晓倩的缘分不过如此,轰轰烈烈爱过,到头来还不是一场春梦了无痕。

2 数组指针与指针数组应用分析

2.1 数组指针的应用

数组指针是指向数组首元素的指针,其实质为一个指针。数组指针在一维数组和二维数组中的应用如下:

在④语句中“p=&a;”表示数组指针p指向的是整个数组的首地址,若写成“p=a”,则表示p指向的是a数组首元素的地址,表示成了指向数组单元的指针,也即把指针类型误弄成“int*”型,而不是指向整型数组类型“int(*)[5]”的指针,因此,它们的值虽然相同,但意义不同。而在语句⑥“p=x;”中,表示p指向的是二维数组的行地址,若写成“p=x[0]”,则表示p指向的是x数组的0行0列元素的地址,即列地址,指针类型不匹配出错。在使用数组指针对二维数组操作时,一定要记得赋二维数组的行地址,否则就出错。

2.2 指针数组的应用

如:int*p2(int a,int b);

1.4.2 指针数组与二维数组指向关系的示意图

3 函数指针和指针函数的对比分析

3.1 函数指针和指针函数的定义格式分析

函数指针变量的定义格式为:“类型名 (*指针变量名)(函数参数表列)”[1]

若对二维数组操作,用行指针变量“p”指向二维数组的第一行,也就是将二维数组第一行的行地址赋给指针变量p,用“p=x;”表示,若执行“p+1”,则p需要跨过5个整型数据的长度后指向二维数组的第二行,“p+2”就指向二维数组的第三行。由此,数组指针p是一个行指针,若对二维数组不同行操作,可用“p++”表示。即行指针p与二维数组的指向关系,如图1所示。

海南琼中抽水蓄能电站上水库副坝一坝址位于一冲沟内,坝基防渗墙厚0.8m,最大墙深约60m,墙底深入至弱风化基岩。副坝一坝址覆盖层分布广,全风化带下限埋深50m~57m,地表有厚近10m的淤泥层,传统防渗墙施工工艺成槽难度极大,在使用液压抓斗配合冲孔桩机施工多次成槽失败后,更换采用德国生产的BC30双轮铣槽机直接铣槽施工,利用其成槽过程中对地层扰动少的优点,顺利实现成槽浇筑,最终按期圆满完成了基础防渗施工。

指针函数的定义格式为:“类型名 *函数名(函数参数表列)”[1]

指针数组是数组,其数组中的每个元素存储的是地址,一般用来存放字符串的起始地址,以节省存储空间。例如:

1.2.6 设置抗菌药物管控专职药师 药学部设置1名抗菌药物管控专职药师,负责统计分析全院抗菌药物使用情况,每月将相关数据上报医务处与质控科,作为科室绩效考评的指标,对不合理用药行为进行通报和经济惩罚。

3.2 函数指针和指针函数的应用分析

3.2.1 函数指针的应用

③语句“int(*q)(int,int);”用来定义指向函数的指针变量q,但是注意q只能指向函数的返回类型为整型,且带有两个整型参数的函数,⑤语句“q=min;”是将min函数的入口地址赋值给指针变量q,表示q指向min函数的入口地址,⑧语句“z=(*q)(x,y);”表示用函数指针变量q调用min函数,若想调用其它格式相同的函数,只要将函数指针(*q)代替函数名,并在(*q)后面写上实参就能实现。函数指针通常应用在,根据情况选择调用不同函数来实现不同的功能[4]

白糖不仅有增甜的作用,还有一部分祛腥的作用,同时它又是非常温和的,不像醋的性味那样过烈,会影响海鲜自身的鲜美。难怪有人评价说,白糖可以当味精来用,为菜品增鲜。

3.2.2 指针函数的应用

⑦语句“q=min(&x,&y);”是表示调用min函数,其调用的方式与调用一般的函数相同,但是需要注意min这个函数返回的是地址。以上函数指针与指针函数两个应用例子的功能相同,但在使用上不同。函数指针的作用是指向函数的入口地址,入口地址的函数名不同,就对不同的函数进行操作;而指针函数是指函数返回的值是地址。

虽然说父辈在农资行业有一定的影响力和知名度,但吴躜辉并没有选择在父辈的呵护下进入这个行业,而是选择了爱普科技,从一名普通员工做起,这一干就是10年。

4 结语

数组指针与指针数组,函数指针与指针函数是C语言中两对容易混淆的概念。数组指针是一个指针变量,指向含有下标元素个数的一维数组,不能指向数组中某单元的地址,若对二维数组操作,需要把数组指针的p指向二维数组的行地址,p++表示指针移动二维数组列下标长度的数组元素个数,常用来对二维数组的行进行操作;而指针数组是一个数组,这个数组每一个单元存储的都是地址,是指多个指针,其指针的个数与指针数组的长度相关,一般应用于存储多个字符串的首地址,以节省存储空间。函数指针是一个指针变量,指向函数的入口地址,若将格式相同的不同函数的入口地址赋给函数指针,就可对不同的函数进行操作;指针函数是函数,只是这个函数的返回值是地址,一般用于返回链表的头指针,便于后续的链表操作。通过对数组指针与指针数组、函数指针与指针函数两对概念的定义与使用进行对比分析,帮助学生区分易错点,加深两对概念的理解,从而突破难点,轻松掌握指针的精华。

参考文献:

[1]谭浩强.C程序设计(第四版)[M].北京:清华大学出版社,2016:251~277.

[2]赵忠孝,杨亚蕾.对C语言指针教学问题的探究[J].Computer Education,2009(9):72~74.

[3]宋灵香,赵静,刘运奇.分析指针数组与数组指针的区别和应用[J]. 甘肃高师学报,2012(2):51~52.

[4]杨智明.C语言指针使用分析 [J].保山学院学报,2009(2):67~70.

杨智明,夏春梅
《保山学院学报》 2018年第2期
《保山学院学报》2018年第2期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号