`
美丽的小岛
  • 浏览: 308834 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

关于C语言的声明而类型转换

    博客分类:
  • c
阅读更多

最近遇到一些总是让人觉得奇怪的事情,例如,有个同学问我一个C语句:
(*(void (*)())0)() ;
这个语句的功能?
有点令人无语,呵呵。从学习C语言以来都没有遇到这样的的语句。不过,直觉告诉我,这个东西一定非常有意思。研究了一些时间,知道这个是用来模拟开机时设计的一个C语句声明,计算启动时,从地址为0开始调用这个函数。
与声明有关系的还有一个叫做类型转换。例如:声明为--int i ;转换为--(int).这个我一直容易混乱,看似十分的简单,但某个时候会混乱。这里是把声明的变量拿掉,用一个括号括在里面。
例如:
int (*fp) fun(int) ;//声明了一个函数指针
(int (*) fun(int)) 1000 ;//把1000转换成一个函数指针
呵呵,慢慢发觉这个东西很有意思了:

#include<stdio.h>
//void (*show(int,void(*)(int)))(int);注意声明与类型转换不同。变量得放在参数的位置。
void show1(int a){
printf("a=%d\n",a) ;
}
void show2(int b){
printf("b=%d\n",b) ;
}
void (*show(int s,void(*p)(int)))(int){//show函数返回值为函数指针形参1为整型,形参2为函数指针类型
   (*p)(s);
   return show2 ;
}
int  main(char * arg[]){
   (*show(100,show1))(100) ;
   void (*f_p) (int) ;//声明指向函数的指针
   int * int_p ;//声明指向整型的指针
   f_p = (void (*)(int)) 100 ;//整型转换成指向函数的指针
   printf("%d\n",sizeof(f_p)) ;//求出指向函数指针的大小
   printf("%d\n",sizeof(int_p)) ;//求出指向整型指针的大小
   return 0 ;
}

 结果:

 其实上面如果加上了typedef成为下面的那样:

#include<stdio.h>
typedef void (*fp)(int) ;
//fp show(int, fp);
void show1(int a){
printf("a=%d\n",a) ;
}
void show2(int b){
printf("b=%d\n",b) ;
}
fp show(int s,fp p){
   (*p)(s);
   return show2 ;
}
int  main(char * arg[]){
   (*show(100,show1))(100) ;
   fp f_p ;//声明指向函数的指针
   int * int_p ;//声明指向整型的指针
   f_p = (fp) 100 ;//整型转换成指向函数的指针
   printf("%d\n",sizeof(f_p)) ;//求出指向函数指针的大小
   printf("%d\n",sizeof(int_p)) ;//求出指向整型指针的大小
   return 0 ;
}

 我们得好好感谢想出typdef这位前辈,能让代码简单与明了这么多。呵呵,,有感于这一瞬间。

 

  • 大小: 4 KB
1
0
分享到:
评论

相关推荐

    C语言隐式类型转换规则

    ### C语言隐式类型转换规则详解 #### 一、引言 C语言作为一种广泛使用的编程语言,具有严格的类型检查机制。在C语言中,不同类型的数值可以通过类型转换来进行混合运算。这种转换分为两种:隐式类型转换和显式类型...

    delphi-C语言到Delphi的转换器-语言转换.zip

    转换过程中可能会遇到挑战,比如C语言中的结构体与Delphi的记录类型对应,C的动态内存分配在Delphi中需要通过`new`和`free`操作。 标签中的“C-to-delphi”和“转换脚本”表明这个工具可能不仅是一个图形用户界面...

    C语言数据类型转换的方式及常见问题探讨.pdf

    在C语言中,数据类型转换是一个核心概念,是程序设计中的基础知识点。本文针对C语言的数据类型转换方式及其常见问题进行了深入探讨。 首先,C语言中的数据类型转换分为隐式转换和显式转换两种。隐式转换,又称为...

    C语言之数据类型 Datatype

    - 显式类型转换:使用`(type)`强制转换表达式的类型,例如`(int)3.14`将浮点数转换为整数。 7. **typedef关键字** - `typedef`可以用来为已有的类型创建别名,提高代码可读性,例如: ```c typedef int Integer...

    C语言基本数据类型

    - **隐式转换**:自动进行的数据类型转换,通常发生在不同数据类型的混合运算中。 - **显式转换**:通过类型转换运算符手动指定转换。例如: ```c int a = 10; float b = 20.5; double result = (double)a / b; ...

    C语言 自动转换与强制转换.zip

    在C语言中,类型转换是编程过程中的重要概念,它涉及到数据类型的相互转换。自动转换(也称为隐式转换)和强制转换(显式转换)是C语言中两种主要的类型转换方式,它们都有各自的规则和应用场景。让我们深入探讨一下...

    C语言转换为Pascal语言转换器  .zip

    例如,C语言中的函数定义在Pascal中需要转换为过程或函数声明,变量声明的语法也大相径庭。C语言的指针概念在Pascal中通常用引用或者记录类型来模拟,因为Pascal不支持直接的指针操作。 C语言中的控制结构,如if-...

    基于C语言的时间戳相互转换日期.rar

    `UnixTime.c`包含了实现两个转换功能的函数,而`UnixTime.h`则包含了它们的原型声明以及结构体的定义。 1. **日期转换为时间戳**:这个函数可能接收一个结构体参数,该结构体包含年、月、日等日期信息,然后通过...

    图片批量转换为C语言数组

    例如,一个简单的实现方式是将图片数据视为一个大的字节数组,然后逐行读取图片数据并将其转换为C语言的char类型数组。 Python脚本可以先遍历指定目录下的所有图片文件,使用Python的图像处理库如PIL(Python ...

    c语言转lc3转换器

    3. **语义分析**:此阶段检查程序的逻辑正确性,例如类型匹配、变量声明等,并开始生成与LC-3架构兼容的中间表示。在C语言中,如`int a = 5;`会被转换为LC-3的内存分配和数据加载指令。 4. **目标代码生成**:最后...

    c语言教学ppt数据类型运算符表达式

    在C语言中,声明变量时需要指定其数据类型,例如int num;。变量名是标识符,它们必须遵循一定的命名规则,通常使用小写字母和下划线组合,避免与关键字冲突。变量在内存中占有特定的存储空间,通过变量名访问其存储...

    大小写转换.C语言系统上机代码

    根据给定的信息,我们可以深入探讨一个关于C语言中字符大小写转换的知识点。这个知识点主要集中在如何使用C语言实现字符串中的字母从大写到小写的转换。下面将详细讲解涉及的相关概念、代码逻辑以及实现原理。 ### ...

    C语言实现二进制转换十进制

    需要注意的是,在 C 语言中没有将字符 char 类型转换为 int 类型的方法,需要自行运算[temp[i] - '0']则是将 char 转换为 int 的方法。 下面是使用 C 语言实现二进制转换十进制的代码: ```c #include "stdio.h" #...

    C语言程序设计-数据类型的转换.pptx

    总的来说,理解C语言中的数据类型转换对于编写高效且无误的代码至关重要。无论是隐式还是显式转换,都需要根据具体需求谨慎处理,以避免不必要的精度损失或类型不匹配导致的错误。在实际编程中,应始终注意类型转换...

    C语言的--类型标识符

    类型转换在C语言中是常见的操作,可以使用强制类型转换(如 `(type)expression`)将一个类型的值转换为另一个类型。需要注意的是,不同类型之间的转换可能导致精度损失或溢出,程序员需要确保转换的安全性。 在编写...

    C语言基本数据类型共3页.pdf.zip

    C语言是一种广泛使用的编程语言,...了解它们如何工作、如何进行类型转换以及何时使用合适的数据类型,将有助于编写出更有效和易于理解的代码。在实际编程中,正确选择和使用数据类型是优化程序性能、减少错误的关键。

    c语言教案 c语言课件 C语言

    表达式的计算规则和类型转换也是关键点。 2. **第04章_选择结构程序的设计.ppt**:这部分内容涵盖条件控制语句,包括if-else语句和switch-case语句,它们用于实现基于条件的程序流程控制。 3. **第05章_循环结构...

    C语言基本数据类型及运算题库

    在C语言中,数据类型转换是将一种数据类型转换为另一种数据类型。例如,float x = 10.5; 将浮点数10.5赋值给浮点型变量x。题目2所示的语句中,正确的选项是C) x=(int)(x*100+0.5)/100.0;,因为这条语句将浮点型变量x...

    TXT转BIN软件(C语言格式)

    这可能涉及到识别特定的注释、数据类型声明、数组声明等。 2. **数据转换**:解析后的数据被转换为二进制格式。例如,整型、浮点型或结构体会被转化为相应的字节序列。 3. **生成BIN文件**:转换后的二进制数据被...

Global site tag (gtag.js) - Google Analytics