天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 10|回复: 0

函数指针 ((void()( ) )0)( )

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
在很多情况下,尤其是读别人所写代码的时候,对 C语言声明的理解能力变得非常重要,而C语言本身的凝练简约也使得C语言的声明常常会令人感到非常困惑,因此,在这里我用一篇的内容来集中阐述一下这个问题。

  问题:声明与函数

  有一段程序存储在起始地址为 0的一段内存上,如果我们想要调用这段程序,请问该如何去做?

  答案

  答案是 (*(void (*)( ) )0)( )。看起来确实令人头大,那好,让我们知难而上,从两个不同的途径来详细分析这个问题。

  答案分析:从尾到头

  首先,最基本的函数声明: void function (paramList);

  最基本的函数调用: function(paramList);

  鉴于问题中的函数没有参数,函数调用可简化为 function();

   其次,根据问题描述,可以知道 0是这个函数的入口地址,也就是说,0是一个函数的指针。使用函数指针的函数声明形式是:void (*pFunction)(),相应的调用形式是: (*pFunction)(),则问题中的函数调用可以写作:(*0)( )。

  第三,大家知道,函数指针变量不能是一个常数,因此上式中的 0必须要被转化为函数指针。

  我们先来研究一下,对于使用函数指针的函数:比如 void (*pFunction)( ),函数指针变量的原型是什么?这个问题很简单,pFunction函数指针原型是( void (*)( ) ),即去掉变量名,清晰起见,整个加上()号。

  所以将 0强制转换为一个返回值为void,参数为空的函数指针如下:( void (*)( ) )。

   OK,结合2)和3)的分析,结果出来了,那就是:(*(void (*)( ) )0)( ) 。

  答案分析:从头到尾理解答案

   (void (*)( )) ,是一个返回值为void,参数为空的函数指针原型。

   (void (*)( ))0,把0转变成一个返回值为void,参数为空的函数指针,指针指向的地址为0.

   *(void (*)( ))0,前面加上*表示整个是一个返回值为void的函数的名字

   (*(void (*)( ))0)( ),这当然就是一个函数了。

  我们可以使用 typedef清晰声明如下:

   typedef void (*pFun)( );

这样定义之后,pFun就是一个返回类型为void无参数的函数指针变量了。

  这样函数变为 (*(pFun)0 )( );

  问题:三个声明的分析

  对声明进行分析,最根本的方法还是类比替换法,从那些最基本的声明上进行类比,简化,从而进行理解,下面通过分析三个例子,来具体阐述如何使用这种方法。

# 1:int* (*a[5])(int, char*);

   首先看到标识符名 a,"[]"优先级大于"*",a与"[5]"先结合。所以a是一个数组,这个数组有5个元素,每一个元素都是一个指针,指针指向"(int, char*)",很明显,指向的是一个函数,这个函数参数是"int, char*",返回值是"int*"。OK,结束了一个。:)

# 2:void (*b[10]) (void (*)());

   b是一个数组,这个数组有10个元素,每一个元素都是一个指针,指针指向一个函数,函数参数是"void (*)()"【注10】,返回值是"void"。完毕!

  注意:这个参数又是一个指针,指向一个函数,函数参数为空,返回值是 "void"。

# 3. doube(*)() (*pa)[9];

   pa是一个指针,指针指向一个数组,这个数组有9个元素,每一个元素都是"doube(*)()"(也即一个函数指针,指向一个函数,这个函数的参数为空,返回值是"double")。

C语言中的函数指针

函数在内存中有一个物理位置,而这个位置是可以赋给一个指针的。一零点函数的地址就是该函数的入口点。因此,函数指针可被用来调用一个函数。函数的地址是用不带任何括号或参数的函数名来得到的。(这很类似于数组地址的得到方法,即,在只有数组名而无下标是就得到数组地址。)

怎样说明一个函数指针变量呢 ?

为了说明一个变量 fn_pointer 的类型是"返回值为 int 的函数指针", 你可以使用下面的说明语句:

int (*fn_pointer) ();

为了让编译器能正确地解释这句语句, *fn_pointer 必须用括号围起来。若漏了这对括号, 则:

int *fn_pointer ();

的意思完全不同了。fn_pointer 将是一个函数名, 其返回值为 int 类型的指针。

函数指针变量  

  在C语言中规定,一个函数总是占用一段连续的内存区,   而函数名就是该函数所占内存区的首地址。   我们可以把函数的这个首地址 ( 或称入口地址 ) 赋予一个指针变量,   使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。   我们把这种指向函数的指针变量称为 " 函数指针变量 " 。  

函数指针变量定义的一般形式为:  

类型说明符  (* 指针变量名 )();  

其中 " 类型说明符 " 表示被指函数的返回值的类型。 "(*  指针变量名 )" 表示 "*" 后面的变量是定义的指针变量。   最后的空括号表示指针变量所指的是一个函数。  

例如:  int (*pf)();


表示 pf 是一个指向函数入口的指针变量,该函数的返回值 ( 函数值 ) 是整型。  

下面通过例子来说明用指针形式实现对函数调用的方法。  

int max(int a,int b){


if(a>b)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);


}


  从上述程序可以看出用,函数指针变量形式调用函数的步骤如下:

1.  先定义函数指针变量,如后一程序中第 9 行  int (*pmax)(); 定义 pmax 为函数指针变量。  

2.  把被调函数的入口地址 ( 函数名 ) 赋予该函数指针变量,如程序中第 11 行  pmax=max;


3.  用函数指针变量形式调用函数,如程序第 14 行  z=(*pmax)(x,y);  调用函数的一般形式为:  (* 指针变量名 ) ( 实参表 ) 使用函数指针变量还应注意以下两点:  

a.  函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。  

b.  函数调用中 "(* 指针变量名 )" 的两边的括号不可少,其中的 * 不应该理解为求值运算,在此处它只是一种表示符号。

 

 

 

 

函数指针 ((void()( ) )0)( )

该用户从未签到

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-7-28 09:28:43 | 显示全部楼层
  法拉利膜材作为一种高性能的建筑材料,在建筑、汽车及广告等多个领域有着广泛的应用。以下是对法拉利膜材型号、特点及优点的详细分析:
[img]http://www.mjgou.com/data/attachment/forum/202403/13/223041uiqmeujen4jjj6zv.jpg[/img]
[b]一、法拉利膜材型号[/b]
法拉利膜材有多种型号,包括但不限于以下几种:1302 S2 Flexlight Advanced:这是一种高性能IV型柔性复合膜材,以其卓越的透光性、耐久性和易维护性而受到青睐。942、1202 S2、1002 S2、902 S2、1212 S2、912 S2:这些型号同样属于法拉利膜材系列,各自具有不同的特性和适用范围,但具体特点需根据具体型号进一步分析。需要注意的是,法拉利膜材的型号可能随着产品更新换代而有所变化,具体型号及其特性请参考最新产品资料。
[img=860,1255]http://www.mjgou.com/data/attachment/forum/202403/13/223254bbblwlbvbvsbwlsl.jpg[/img]
[b]二、法拉利膜材特点[/b]
法拉利膜材的特点主要体现在以下几个方面:
1、高强度与耐用性:法拉利膜材采用高强度材料制成,具有良好的抗拉强度和撕裂强度,能够承受较大的外力作用而不易破损。耐用性强,能够在恶劣气候条件下保持稳定的性能,延长使用寿命。
2、透光性与美观性:部分型号如1302 S2 Flexlight Advanced具有高透光性,能够在保持室内光线充足的同时,提供清晰的视野。膜材表面平整光滑,色彩丰富多样,能够满足不同建筑和装饰需求,提升整体美观性。
3、轻质与灵活性:法拉利膜材重量较轻,便于运输和安装,能够降低施工成本和时间。膜材具有一定的柔韧性,能够适应各种复杂形状和结构的设计要求。
4、环保与可回收性:法拉利膜材符合环保要求,部分材料可回收利用,减少了对环境的影响。
[img]http://www.mjgou.com/data/attachment/forum/202403/13/223128owhn0099rrds5h5y.jpg[/img]
[b]三、法拉利膜材优点[/b]
法拉利膜材的优点主要体现在以下几个方面:
1、提升建筑性能:高强度与耐用性使得法拉利膜材能够提升建筑的稳定性和安全性,延长使用寿命。透光性与美观性使得建筑内部光线充足、视野开阔,同时提升整体美观度。
2、降低施工成本:轻质特性使得运输和安装成本降低,施工效率提高。膜材的柔韧性使得施工更加灵活多变,能够适应各种复杂地形和结构要求。
3、节能环保:部分材料可回收利用,符合环保要求,减少了对环境的影响。良好的透光性能够减少室内照明需求,降低能耗。
4、广泛应用领域:
法拉利膜材不仅适用于建筑领域(如体育设施、商业设施、文化设施、交通设施等),还广泛应用于汽车及广告领域(如高档车辆贴膜保护和装饰、广告招贴等),展现出其多功能的特性。

综上所述,法拉利膜材以其高强度、耐用性、透光性、美观性、轻质灵活性以及环保可回收性等优点,在建筑、汽车及广告等多个领域发挥着重要作用。具体型号的选择应根据实际需求和应用场景进行综合考虑。
[url=http://www.mjgou.com/forum-17-1.html][size=92651][color=Red]法拉利膜材中国代理商 - 膜结构网[/color][/size][/url]
函数指针 ((void()( ) )0)( )

该用户从未签到

主题

0

回帖

2

积分

新手上路

积分
2
发表于 2024-8-6 10:42:43 | 显示全部楼层
赛普斯膜材中的PTFE膜材是一种高性能的建筑用膜材,具有诸多优异的性能特点。以下是对赛普斯品牌及PTFE膜材的详细介绍,包括品牌介绍和膜材型号参数。
赛普斯品牌介绍
赛普斯是一家专业研发生产新型环保材料的企业,专注于PVC、PVDF、PTFE等膜材的研发与生产。公司产品广泛应用于建筑、交通、能源、环保等领域,以其优良的品质和合理的价格赢得了市场的广泛认可。赛普斯膜材以其卓越的性能和广泛的应用领域,在建筑行业中占有重要地位。
PTFE膜材型号参数
赛普斯PTFE膜材的具体型号参数可能因产品批次、生产标准和客户需求而有所不同。然而,根据一般经验,PTFE膜材的主要参数可以归纳如下:
参数类别描述
基材:玻璃纤维,纤维直径范围在3.30~4.05μm,重量应大于150g/m²。
涂层:聚四氟乙烯树脂,含量不低于90%,涂层重量应大于400g/m²。
厚度:膜材厚度宜大于0.5mm,具体厚度可根据项目需求定制。
颜色:乳白、半透明,可根据设计需求进行定制。
光学性能:光线反射率70~80%,透光率10~50%,具体数值可能因产品批次和厚度而有所差异。
物理性能:拉伸强度高,弹性模量低,有利于形成复杂的曲面造型。
化学性能:耐化学腐蚀性强,几乎不受任何化学物质侵蚀,包括强酸、强碱和有机溶剂。
耐候性:优异的耐候性,能长期抵抗紫外线、臭氧、酸雨等环境因素的侵蚀。
自洁性:雨水可冲刷掉表面的附着物,降低维护成本。
防火性能:通常为B1级难燃材料,符合建筑防火要求。
使用寿命:生产厂商给出的质量保证年限为10年,但实际耐候试验观测表明,其力学与物理化学性能无退化现象,使用寿命可达25年以上。
需要注意的是,以上参数仅为一般性描述,具体数值可能因产品型号、生产批次和客户需求而有所不同。在选购赛普斯PTFE膜材时,建议直接咨询生产商或经销商以获取最准确的产品信息。
此外,赛普斯PTFE膜材还因其独特的性能特点而广泛应用于大型公共设施,如体育场馆的屋顶系统、机场大厅、展览中心、站台等。其高强度、耐候性、自洁性和防火性能等优异特点,使得PTFE膜材成为现代建筑设计中不可或缺的一部分。

 

 

 

 

函数指针 ((void()( ) )0)( )
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:42 , Processed in 0.178954 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表