指针知识
关于钟表长短针知识总结

关于钟表长短针知识总结
一般来说,时针要看的是一个范围,在这个范围内就不会错,所以短点也没关系;而分针看的时候一般希望能精确到分,太短,则很难判断针指的位置在哪个精准刻度间,秒针原理亦是如此。
所以在精确与省能量的选择上,设计师们选择了精确。
说到指针,很多表友想到的就是柳叶针、宝玑针等等。
这些都是就形状而言的大常规针,我们今天不谈这些形状,太肤浅了。
今天我们看看统统的这些针要怎么样才是好的,才是可以拿得出手的。
说指针,我们就先了解指针的几个关键东西。
首先是指针孔径。
孔径就是表针和机芯针轴固定的孔大小,表针的孔径是严格按照机芯针轴孔径大小来的。
比如我们常用的ETA2824-2机芯时轮轴外直径是1.25mm的话,那么时针的表针轴孔的工程孔径就应该在1.26mm左右。
一个指针通常是又两部分组成针管和针。
除了这两个还有夜光什么的,就不延伸了。
常规三针的针轴除了秒针的针轴是实心的外分针、时针的针轴都是空心的。
我们了解针孔直径后就知道了,只要用同一款机芯的手表,表针的孔径都是一样的,但是这不代表着针孔直径一样就能在手表中互换了。
还有两个关键的数据,针高和针长。
针高指的是针管高度,这个高度决定了指针间的避空和针和镜面的避空。
针长是指针孔中心到最长端针尖的距离,也就是盘面大小决定了指针的最长尺寸。
大一下学期C语言期末重点知识点总结

大一下学期C语言期末重点知识点总结在大一下学期的C语言课程中,我们学习了很多基础的编程概念和技能。
在期末考试前,我们需要对学过的知识做一个全面的复习和总结,以便更好地准备考试。
以下是我根据学习笔记和教材整理的大一下学期C语言期末重点知识点:1. 指针指针是C语言中最重要的概念之一,理解指针的意义和使用方法对于提高程序员的编程能力至关重要。
指针有如下使用方法:1. 定义指针变量:定义指针变量需要指定一个指针类型,例如int*。
在定义后,我们可以将其赋值为一个地址。
2. 操作指针变量:操作指针变量时,我们可以使用两个运算符:*和&。
*运算符表示取出指针指向地址中的值,而&运算符表示获取地址。
3. 指针作为函数参数:函数可以定义一个参数作为指针类型,然后使用指针来传递变量的地址,以便在函数中对其进行修改。
4. 动态分配内存:使用malloc函数可以动态分配内存,返回指向所分配内存的指针。
动态分配内存的好处是我们可以在运行时根据需要动态地按照需要分配内存。
2. 结构体结构体是C语言中另一个重要的概念。
它允许我们定义一个包含多个成员(变量)的类型。
每个成员可以是不同的类型。
我们可以按照如下方式定义结构体:1. 关键字struct:使用关键字struct来定义结构体类型。
例如,我们可以定义一个名为student的结构体类型,它包含名字和年龄两个成员。
2. 内部成员:我们可以在结构体内部定义成员变量。
成员变量的类型可以是任何C语言类型。
3. 访问结构体成员:我们可以通过相应的结构体变量和“.”运算符来访问结构体成员。
4. 结构体指针:我们也可以定义指向结构体的指针,类似于定义指针变量。
使用->运算符来访问结构体指针所指向的成员。
3. 数组数组是C语言中最常见的数据类型之一。
数组是一种容器,可以存储一组有序的数据。
以下是常见的数组操作方法:1. 定义数组变量:定义数组变量时需要指定一个类型和用于存储数据的空间大小。
牛课-C++基础知识-指针赋值

⽜课-C++基础知识-指针赋值1、C/C++指针参数赋值⽤法指针(pointer)是“指向(point to)”另外⼀种类型的复合类型,它实现了对其它对象的间接访问。
定义指针类型的⽅法将声明符写成*d的形式,其中d是变量名,如以下代码声明了⼀个整形指针:int *ip1;指针赋值对指针进⾏赋值只能使⽤以下四种类型的值:(1)空指针(2)类型匹配的对象的地址(3)同类型的另⼀个有效指针(4)另⼀对象之后的下⼀地址。
1)空指针空指针(null pointer)不指向任何对象。
(1)赋值为空指针有以下⼏种⽅法可以将指针赋值为空指针。
int *p1 = nullptr;int *p2 = 0;int *p3 = NULL;其中,nullptr是C++11新标准刚刚引⼊的⼀种⽅法。
(2)不能赋值为整形变量,但是可以赋值为整形常量把整形变量直接赋给指针是错误的操作,如int zero = 0;int *p1 = zero;如果将zero声明为常量值,则可以⽤其对指针进⾏赋值:const int zero = 0;int *p1 = zero;(3)未定义的指针如果只是声明了⼀个int指针,⽽未对其进⾏定义,如int *p4;2)类型匹配的对象的地址可以将指针赋值为其类型匹配的对象的地址。
int one = 1;int *p5 = &one;此时p5的值是0x005CFB98,⽽0x005CFB98的内存中保存的值是4个字节的int类型的数据,其值为1。
3)同类型的另⼀个有效指针可以将指针赋值为同⼀类型的另⼀个有效指针。
int *p6 = p5;p6的值与p5的值相同,都是0x005CFB98。
4)另⼀对象之后的下⼀地址还可以将指针赋值为同类型对象的下⼀个地址。
int *p7 = p5+1;p7的值是0x005CFB9C,也就是p5的值0x005CFB98加上4个字节。
ref:2、C/C++指针参数赋值问题关于在函数⾥对指针赋值的问题。
认识钟表最简单的方法

认识钟表最简单的方法认识钟表是大家小时候的必修课之一,但是对于一些年龄较小的孩子,学习钟表可能比较困难。
这篇文章将向大家介绍认识钟表最简单的方法,帮助孩子轻松掌握钟表知识。
一、钟表的构造及功能钟表主要由表盘、指针、表壳和表带四个部分组成。
表盘是钟表上显示时间的部分,通常分为12小时制和24小时制。
指针是指示时间的部分,由时针、分针和秒针组成,它们通过机芯内的齿轮传递力量,以实现指针的转动。
钟表的功能不仅仅是显示时间,还包括计时、闹钟、计时器等多种功能,有些高端的钟表还有气压计、高度计、温度计等多种仪器功能。
二、认识钟表的基本知识1. 时针、分针、秒针的区别小时针通常比分针和秒针都要短,而分针比时针短,秒针则最长。
时针指示小时,分针指示分钟,秒针指示秒数。
2. 12小时制和24小时制的区别12小时制是指一天分为上午和下午两个时间段,每个时间段各有12个小时。
而24小时制则是一天24个小时,从0点开始计数,到24点结束。
3. 读写时间的方法读写时间的基本方法是先读小时,再读分钟。
例如,10:30可以读作“十点三十分”,或者“上午10点半”。
4. 指针的转动方式时针和分针的转动方式是顺时针。
而秒针则是每秒钟转动一格,一周要转动7*24*60*60=604800格。
指针的转动速度是由机芯内的齿轮传递力量决定的。
三、实践操作认识钟表为了帮助孩子更好的掌握钟表知识,以下是几个实践操作。
1. 给孩子提出时间问题,让孩子说出准确的时间例如:“如果现在是下午3点半,那么过1小时之后是几点钟?”“如果你要在下午5点45分之前赶到学校,你必须在几点钟之前离家?”让孩子根据时针、分针要点出正确的时间。
2. 让孩子学习把钟表拨到规定的时间告诉孩子现在的时间是多少,然后让孩子操作钟表,将指针拨到和当前时间相同的位置。
让孩子多重复操作,可以提高孩子的认知能力。
3. 指导孩子观察钟表,快速把时间相同的表盘区分开来每个表盘都有相同的外观,但是指针的位置不同。
小学数学知识归纳钟面上的时针和分针

小学数学知识归纳钟面上的时针和分针时针和分针是钟面上两个重要的指针,用于显示时间。
在小学数学中,学生通常会接触到有关时针和分针的知识。
本文将对小学数学中与钟面上的时针和分针相关的知识进行归纳总结。
一、时针和分针的定义和特点在钟面上,时针用于指示小时,分针用于指示分钟。
它们的长度和位置不同,有一些特点需要了解。
1. 时针:时针较短,粗一些,位于钟面中心。
它每小时走过一个完整的360度,每走过一小格(5分钟),时针就会前进6度。
时针始终指向当前的小时数。
2. 分针:分针较长,细一些,位于时针的外侧。
它每分钟走过一个完整的360度,每走过一小格(1分钟),分针就会前进6度。
分针指示的是当前的分钟数。
二、时针和分针的关系和重要性时针和分针之间有一种特殊的关系,即它们的运动是紧密相连的。
当分钟数变化时,时针也会随之移动,而小时数的变化则是以时针为基准。
时针和分针是我们理解和计算时间的基础。
通过它们的运动,我们可以知道当前的时间是几点几分,帮助我们进行日常生活的安排和时间的把控。
三、时针和分针的运动规律时针和分针的运动是有一定规律的,了解这些规律对于解决与时间相关的问题非常重要。
1. 时针的运动规律:- 时针每走过一小格(5分钟),就前进6度;- 时针共有12小格,即12小时。
2. 分针的运动规律:- 分针每走过一小格(1分钟),就前进6度;- 分针共有60小格,即60分钟。
四、时针和分针的应用了解时针和分针的知识,我们可以应用它们解决一些相关的问题,如计算经过一段时间后,时针和分针的位置变化等。
举例说明,假设现在是上午10点,我们想知道经过3小时30分钟后的时间是多少。
我们可以按照以下步骤进行计算:1. 首先,计算时针的移动:每走过一小格(5分钟),时针前进6度。
3小时30分钟共有(3 × 12) + (30 ÷ 5)= 36 + 6 = 42小格。
2. 接下来,计算分针的移动:每走过一小格(1分钟),分针前进6度。
C语言程序设计知识点—第8章 指针结构体与预处理命令

指针使用示例 2 void main() { int num1 = 50, num2 = 100; int *ptr1, *ptr2; ptr1 = &num1; printf(" num1 的值是: %d", *ptr1); printf("\n num1 的地址是: %x \n", ptr1); ptr2 = &num2; printf("\n num2 的值是: %d", *ptr2); printf("\n num2 的地址是: %x \n", ptr2); *ptr2 = *ptr1; printf("\n 重新赋值后 num2 的值是: %d", *ptr2); printf("\n 重新赋值后 num2 的地址是: %x\n", ptr2); }
C 语言程序设计知识点
主讲教师:杨剑
第 8 章:指针、结构体与预处理命令
1. 本章目标
理解指针的概念 定义指针变量 掌握对指针的操作 理解指针和数组的关系 理解结构体的概念和定义 理解预处理指令
2. 内存地址
内存是一个连续编址的空间,每一个存储单元都有一个固定的编号,称为内存地址。 内存地址通常用 16 进制数表示。
指针互相赋值
指针互相赋值指针是C++中一种非常重要的数据类型,它可以用来表示内存中的地址。
指针的操作非常灵活,可以用来进行各种高级的内存操作。
其中,指针的赋值操作是一种很常见的操作,本文将详细介绍指针互相赋值的相关知识。
1. 什么是指针互相赋值?指针互相赋值就是将一个指针变量的值赋给另一个指针变量。
在C++中,指针变量存储的是内存地址,因此指针之间的赋值操作实际上是将一个内存地址赋给了另一个变量。
2. 指针互相赋值的语法指针互相赋值的语法非常简单,只需要用一个指针变量的值来初始化另一个指针变量即可。
例如:int *p1 = new int(10); // 创建一个指向动态分配的整数的指针int *p2 = p1; // 将p1的值赋值给p2在以上代码中,我们创建了一个指向动态分配的整数的指针p1,并将p1的值赋值给了另一个指针变量p2。
3. 指针互相赋值的影响指针互相赋值会影响指针变量指向的内存地址和内存中存储的数据。
例如,如果我们在指针变量p1上使用delete运算符,那么p2也会指向一块已经被释放的内存。
int *p1 = new int(10); // 创建一个指向动态分配的整数的指针int *p2 = p1; // 将p1的值赋值给p2delete p1; // 释放p1指向的内存cout << *p2 << endl; // p2指向的内存已经被释放,输出的结果是不确定的在以上代码中,我们首先创建了一个指向动态分配的整数的指针p1,并将p1的值赋值给了另一个指针变量p2。
然后,我们使用delete运算符释放了p1指向的内存。
此时,p2指向的内存也已经被释放,因此输出的结果是不确定的。
4. 指针赋值和深拷贝指针互相赋值也涉及到指针赋值和深拷贝的概念。
指针赋值是将一个指针变量的值赋给另一个指针变量,这两个指针变量指向的是同一块内存。
指针赋值通常用于引用数据类型中的成员变量赋值。
c语言指针教学中的知识点分析与总结
c语言指针教学中的知识点分析与总结c语言指针教学中的知识点分析与总结本文对c语言指针的教学进行了探讨和总结。
要想真正的掌握c 语言的指针,首先必须要对它有全面深刻的认识。
因为它是c语言的基础,只有将指针的知识学好,才能够更好地学习后续的课程。
下面小编给大家介绍一下关于c语言指针的知识。
一、 c语言中指针的定义指针是一种特殊的数据类型,也称为引用类型。
所谓指针就是指向一个地址的变量,例如: int a[10];二、变量指针及指针变量1.1 c语言中的变量。
变量是存储在计算机中的二进制数值,当我们需要使用时,必须创建一个变量并赋予它相应的值,然后将变量的地址传递给外部的一个或多个对象,这样外部对象通过访问内部变量来使用其中存储的信息,而且可以保证外部对象不会越界。
1.2指针变量是变量的一种特殊形式,指针变量在内存中占有一块区域,可以指向一个地址,这个地址的值是这个变量所代表的值,这样方便变量间的传递。
例如: char *a[10];2.1指针操作符2.2指针数组,它的作用和一维数组相同,即具有一维数组的特点,也具有二维数组的特点,三者最明显的区别就是二维数组中元素个数是固定的,而一维数组中元素个数是可变的。
2.3指针的运算规则。
在指针变量的操作中,要遵循以下运算规则:原地址→指针地址。
例如: char * a[10]; 2.4 c语言中的const指针常量是一种特殊的指针常量, const不是一种变量的标准类型,它专门用于指向一个const指针。
2.3指针的运算规则。
在指针变量的操作中,要遵循以下运算规则:原地址→指针地址。
例如: char *a[10];2.4指针的定义与使用:所谓指针就是指向一个地址的变量,例如: int a[10]; 2.4指针的定义与使用: pointer, pointer-pointer,and-and-and。
所以,当我们在一个字符串中出现pointer,pointer-pointer, and-and-and的时候,就表示它指向一个地址。
人教版小学四年级数学上册教案认识钟表的指针与时间的刻度
人教版小学四年级数学上册教案认识钟表的指针与时间的刻度认识钟表的指针与时间的刻度钟表是我们日常生活中经常使用的工具,它可以帮助我们了解时间的变化。
而要准确地读懂钟表,就需要认识钟表的指针和时间的刻度。
本文将介绍人教版小学四年级数学上册的教案,帮助学生们更好地认识钟表。
一、认识钟表的指针钟表上通常有两根指针,一根是长指针,用于表示时针,另一根是短指针,用于表示分针。
在认识指针之前,学生们需要了解时针和分针所指示的意义。
1. 时针:时针通常为较短的指针,它表示的是小时。
小时是用来刻画一天中不同时间段的单位,我们常常用数字表示小时。
时针上的数字从1到12,分别代表一个小时。
当时针指向1时,表示一点钟;当时针指向2时,表示两点钟;以此类推。
2. 分针:分针通常为较长的指针,它表示的是分钟。
分钟是用来刻画一个小时内不同时间段的单位,我们通常用数字表示分钟。
分针上的数字从0到60,表示了一小时内的每一分钟。
当分针指向12时,表示整点;当分针指向6时,表示半点。
二、认识时间的刻度钟表上的刻度用来帮助我们精确读取时间,刻度的分布是有规律的,学生们需要认识并理解这些规律。
1. 小时刻度:整点的时间刻度通常比其他刻度稍长一些,它们用来表示小时。
示意图中,1、2、3、4、5、6等数字代表一个小时。
2. 分钟刻度:分钟刻度用来表示分钟数,它们的分布非常规律。
每个小时分为60分钟,因此钟表上有60个分钟刻度。
从一个小时的开始到结束,刻度数依次增加,表示分钟的增加。
三、教案安排为了帮助学生更好地认识钟表的指针和时间的刻度,教案可以采取以下步骤:1. 导入:老师可以通过提问学生所熟悉的钟表形状和指针名称的方式引入学习主题。
2. 认识时针:让学生观察时针的长度和位置,引导他们认识时针的作用和表示的时间单位。
3. 认识分针:同上,让学生观察分针的长度和位置,引导他们认识分针的作用和表示的时间单位。
4. 知识巩固:通过一些练习题,让学生巩固所学知识,例如:指出指针指向的具体时间、根据时间设定指针位置等。
认识钟表知识点
认识钟表知识点钟表是一种用来测量时间的装置,它通常由时针、分针和秒针组成,每个指针在钟表的刻度盘上表示不同的时间单位。
钟表是人类创造的伟大发明之一,它帮助人们在日常生活中准确地把握时间。
我们来了解一下钟表的结构。
钟表通常由外壳、机芯和指针组成。
外壳是钟表的外部包装,它可以是金属、塑料或其他材料制成。
机芯是钟表的核心部件,它包含了各种齿轮和机械装置,用来驱动指针的运动。
指针是钟表上最重要的部分,它们通过机芯的驱动来显示时间。
钟表的指针通常有三个,分别是时针、分针和秒针。
时针是最短的指针,它表示小时数。
分针比时针长一些,它表示分钟数。
秒针是最长的指针,它表示秒数。
当指针指向刻度盘上的特定刻度时,我们就可以读取出相应的时间。
除了指针,钟表上还有刻度盘和刻度线。
刻度盘上通常有12个小时刻度和60个分钟刻度,用来帮助我们更准确地读取时间。
刻度线则是连接刻度盘和指针的线条,它们可以帮助我们更清晰地看到指针的位置。
现代的钟表大多数采用电子技术,利用电子元件来驱动指针的运动。
这种钟表通常内置了电池和晶体振荡器,可以精确地测量时间。
而传统的机械钟表则是通过齿轮和摆轮的配合来驱动指针的运动,需要定期上弦或摆动来保持正常运转。
钟表不仅仅是一种时间测量工具,它还具有一定的美学价值。
许多钟表采用了精美的设计和工艺,成为了艺术品的一种。
钟表的外观可以是简约、经典或奢华,适合不同人群的品味和需求。
总的来说,钟表是人类用来测量时间的重要工具,它在我们的生活中扮演着不可或缺的角色。
无论是现代的电子钟表还是传统的机械钟表,它们都帮助我们准确地把握时间,让我们的生活更加有序和高效。
钟表的结构和工作原理也是我们了解时间测量的重要知识点,通过对钟表的认识,我们可以更好地理解时间的流逝和价值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
244460725353320指针专题作者:anangcl一、数组的指针、指针数组以及指向指针的指针考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。
换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类。
A)一维数组在c和c++中数组的指针就是数组的起始地址(也就第一个元素的地址),而且标准文档规定数组名代表数组的地址(这是地址数值层面的数组表示)。
例如:int a[10];int *p;p=&a[0]//和p=a是等价的:因为a是数组名,所以他是该数组的地址,同时因为第一个元素为a[0],那么&a[0]也代表了该数组的地址。
但是我们是不是就说一个数组名和该数组的第一个元素的&运算是一回事呢?在一维的时候当时是的,但是在高维的时候,我们要考虑到维数给数组带来的影响。
a[10]是一个数组,a是数组名,它是一个包含10个int类型的数组类型,不是一般的指针变量噢!(虽然标准文档规定在c++中从int[]到int*直接转换是可以的,在使用的时候似乎在函数的参数为指针的时候,我们将该数组名赋值没有任何异样),a代表数组的首地址,在数字层面和a[10]的地址一样。
这样我们就可以使用指针变量以及a来操作这个数组了。
所以我们要注意以下问题:(1)p[i]和a[i]都是代表该数组的第i+1个元素;(2)p+i和a+i代表了第i+1个元素的地址,所以我们也可以使用*(p+I)和*(a+I)来引用对象元素;(3)p+1不是对于指针数量上加一,而是表示从当前的位置跳过当前指针指向类型长度的空间,对于win32的int为4byte;B)多维数组对于二维数组a[4][6];由于数组名代表数组的起始地址,所以a(第一层)和第一个元素a[0][0]地址的数字是相同的,但是意义却是不同的。
对于该数组我们可以理解为:a的一维数组(第一层),它有四个元素a[0]、a[1]、a[2]、a[3](第二层),而每个元素又含有6个元素a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5](第三层),…到此我们终于访问到了每个元素了,这个过程我们经历了:a->a[0]->a[0][0];整体来讲:a是一个4行5列的二维数组,a表示它指向的数组的首地址(第一个元素地址&a[0]),同时a[0]指向一行,它是这个行的名字(和该行的第一个元素的首地址相同(第一个元素为地址&a[0][0]))。
所以从数字角度说:a、a[0]、&a[0][0]是相同的,但是他们所处的层次是不同的。
既然a代表二维数组,那么a+i就表示它的第i+1个元素*(a+i)的地址,而在二维数组中*(a+i)又指向一个数组,*(a+i)+j表示这个数组的第j+1个元素的地址,所以要访问这个元素可以使用*(*(a+i)+j)(也就是a[i][j])。
他们的示意图为(虚线代表不是实际存在的):对照这个图,如下的一些说法都是正确的(对于a[4][6]):∙a是一个数组类型,*a指向一个数组;∙a+i指向一个数组;∙a、*a和&a[0][0]数值相同;∙a[i]+j和*(a+i)+j是同一个概念;总结一下就是:我们对于二维指针a,他指向数组a[0,1,2,3],使用*,可以使他降级到第二层次,这样*a就指向了第一个真正的数组。
对于其他的情况我们也可以采用相同的方式,对于其他维数和类型的数组我们可以采用相类似的思想。
说到指向数组的指针,我们还可以声明一个指针变量让它指向一个数组。
例如:int (*p)[5];这时p就是一个指针,要指向一个含有5个int类型元素的数组,指向其他的就会出现问题。
这个时候我们可以使用上面的什么东西来初始化呢?我们可以使用*a,*(a+1),a[2]等。
原因很简单:我们在一个二维的数组中,那么表达方式有上面的相互类似的意义呢?只有*a,*(a+1),a[2]等,C)指针数组一个指针数组是指一个数组中的每个元素都是一个指针,例如:int *p[10];//而不能是int (*p)[10]或者char *p[10];此时p是一个指针(数值上和&p[0]一样);在前面有int t[10];int * pt=t;//使用pt指向t那么这里我们用什么指向int *t[10]中的t呢?我们要使用一个指针的指针:int **pt=t;这是因为:在int *t[10]中,每个元素是指针,那么同时t又指向这个数组,数组上和&t[0]相同,也就是指向t[0],指向一个指针变量,可以说是一个指针的指针了,所以自然要用int **pt;D)指针的指针一个指针变量内部可以存储一个值,这个值是另外一个对象的地址,所以我们说一个指针变量可以指向一个普通变量,同样这个指针变量也有一个地址,也就是说有一个东西可以指向这个指针变量,然后再通过这个指针变量指向这个对象。
那么如何来指向这个指针变量呢?由于指针变量本身已经是一个指针了(右值),那么我们这里就不能用一般的指针了,需要在指针上体现出来这些特点,我们需要定义指针的指针(二重指针)。
int *p1=&i;int**p2=&p1;综合以上的所有点,下面是我们常常看到一些匹配(也是经常出错的地方):int a[3],b[2][3],c,*d[3];void fun1(int *p);void fun2(int (*p)[3]);void fun3(int **p);void fun4(int p[3]);void fun5(int p[]);void fun6(int p[2][3]);void fun7(int (&p)[3]);函数不会产生编译时刻的可能值(但逻辑上不一定都对)为什么可以有这样的搭配,原因如下:∙对于fun1 fun4 fun 5: 在编译器看来fun1,fun4,fun5的声明是一样,在编译时候,编译器把数组的大小舍去不考虑,只考虑它是一个指针,也就是说有没有大小说明是一样的,所以三者的形式都是fun1的形式(其实只要提供了int*指针就可以了);∙对于fun7 :以上的解释对于引用是不适用的,如果变量被声明为数组的引用,那么编译器就要考虑数组的大小了,那么必须和声明一模一样(所以fun7就只有a合适);∙对于fun2:p是一个指向一个含有3个元素的数组,这样b和b+i正好合适,而a却不是(它是指向a[0]的,不是指向这个数组的);∙对于fun3:p是一个指针的指针,而d指向d[0],同时d[0]又是一个指针,所以d就是一个指针的指针。
但是b却不是(它是一个2*3的矩阵也就是年int [2][3]类型);∙对于fun6,p是一个2*3的数组类型,和b恰好完全匹配;二、函数指针、函数的指针参数以及返回指针的函数A) 函数指针C++规定,一个函数的地址就是这个函数的名字。
我们需要指出的就是一个指针需要指定类型是为了后来的指针解析时候使用,通过指针有效快速访问对象。
那么对于函数的指针,它要表示出该函数的那些特性才能满足解析的唯一性呢?答案就是一个函数的特性有它的参数列表和返回类型。
下面是一个函数指针的例子:int (*p)(int I,int j);不能是int *p(int I,int j),这样就变成了返回指针的函数声明了。
在C++中处于对安全性的考虑,指针和它指向的对象要类型一致,也就说上面的指针所指向的函数的特性要和它一模一样:例如指向int min(int I,int j);是可以的。
但是指向int min(double I ,double j);是不可以。
函数指针也和其他的指针一样,在使用的时候很怕发生"悬空",所以在使用的时候同样要判断有效性,或者在定义的时候就初始化。
int (*p)(int I,int j)=min;int (*p)(int I,int j)=&min;int (*p)(int I,int j)=0;B) 函数的指针参数函数指针可以作函数的参数:例如我们有一个积分的算法,对于不同的数学函数可以进行积分(我们这里假设函数都是一元的);那么我们的算法接口可以定义为:template<class T>T integrate( T lower, T upper , T (*)(T)=0 )throw(integrated_exp);这里的最后的参数是一个函数的指针,并且被设定缺省值为0。
这个函数返回一个值,同时需要一个参数。
假如加入我们有这样的一个函数:double line(double x){ return a*x+b;}那么我就可以使用了。
函数指针还可以作为返回类型(注意不是函数!!,某个特定的函数是不可以作为返回类型的。
)假设:typedef int (*PF)(int );PF getProcessMethod( );//trueC) 返回指针的函数一个函数的返回是函数的重要接口之一,c++的一个重要的强大的功能就是能够设计足够复杂和好用的用户自定义类型。
而同时处理和传递这些类型也是很麻烦的一件事情,我们不想把我们的时间都花在这些对于我们的实际工作没有很实质帮助的拷贝上,解决这个问题就要依赖我们的接口设计:c和c++都提供了相应的解决方案,在c++中我们可是使用引用,讲他们作为函数的实际参数,或者我们在函数的实际参数中使用一个指针等。
同样我们还可以使用一个函数返回一个指针:但是这是一个很不好解决的问题!我们首先容易出错的是:将一个局部变量的地址传出来!例如:UserType * Process( ){UserType ut(param-list);//process ut;return &ut;//}这个变量在我们的函数结束的时候就被销毁了,尽管地址可以传出去,但是这个地址已经不存在了,已经不能使用的东西,在这个函数之外却不知道,难免要出错!同时我还会有一个比较麻烦的问题:使用new,又容易造成内存泄露UserType * Process ( ){UserTpye *put=new UserType(param-list );//process put;return put;}我们在函数内部使用了一个new,分配了一个空间,这样传出来也是可以!就是说不会发生上面的问题了。
但是用户通常都会忘记在程序的外面在把这个借来的空间还回去!内存空间就这样泄露了!可能也是这些另人无奈的问题,所以很多程序员把函数的参数设定为指针或者引用,以此来代替这种向外传输吧!总之,使用这种返回指针的函数要小心!三、类成员的指针类成员和一般的外部变量相互比较,不同就是它所在的域不同,这个域很重要,它决定了该变量可以使用的范围。