- 类型转换:这是最常见、最主要的作用。
- 旧式函数声明:这是一种非常过时的语法,在现代C编程中已不推荐使用。
下面我们来详细解释这两种情况。

(图片来源网络,侵删)
类型转换
这是 (int) 最核心、最广泛的用途,它告诉编译器:“将这个表达式的值,暂时当作一个 int 类型的值来处理”,这通常被称为强制类型转换或显式类型转换。
它分为两种情况:
a) 从其他类型转换为 int
当 (int) 作用于一个非整型表达式时,它会将该表达式的值转换为一个 int 类型的值。
转换规则:

(图片来源网络,侵删)
- 对于浮点数(
float,double):会进行截断,即直接丢弃小数部分,只保留整数部分。注意:这不是四舍五入! - 对于字符型(
char):会将字符的ASCII码值提升为int类型。 - 对于布尔型(
_Bool或bool):true(1) 会转换为1,false(0) 会转换为0。
示例代码:
#include <stdio.h>
int main() {
// 1. 从 double 转换为 int (截断)
double d = 3.14159;
int i = (int)d;
printf("d = %f, i = %d\n", d, i); // 输出: d = 3.141590, i = 3
// 2. 从 char 转换为 int (提升)
char c = 'A';
int ascii_value = (int)c;
printf("c = %c, ascii_value = %d\n", c, ascii_value); // 输出: c = A, ascii_value = 65
// 3. 从 bool 转换为 int
#include <stdbool.h> // 需要包含这个头文件才能使用 bool
bool flag = true;
int flag_as_int = (int)flag;
printf("flag = %d, flag_as_int = %d\n", flag, flag_as_int); // 输出: flag = 1, flag_as_int = 1
return 0;
}
b) 从 int 转换为 int
当 (int) 作用于一个本身就是 int 类型的表达式时,它看起来是多余的,但它在语法上是合法的,它被称为冗余类型转换。
为什么这么做?
- 明确意图:向代码的阅读者(以及编译器)明确表示,开发者知道这个值是
int类型,并且希望它保持int类型,这可以消除编译器的某些警告(当编译器认为一个int到int的转换可能是不必要的时)。 - 代码风格:在某些情况下,为了保持代码风格统一,可能会对所有需要类型转换的地方都加上转换符。
示例代码:

(图片来源网络,侵删)
#include <stdio.h>
int main() {
int a = 10;
int b = (int)a; // 冗余的类型转换
printf("a = %d, b = %d\n", a, b); // 输出: a = 10, b = 10
return 0;
}
注意:这种转换在功能上没有任何改变,但有时能通过一些严格的编译器警告检查。
旧式函数声明
在C语言的早期标准(C89/ANSI C)之前,函数声明可以不写参数列表,只写返回类型,如果参数列表为空,表示函数可以接受任意数量和任意类型的参数,这非常危险。
(int) 在这种上下文中作为函数声明的一部分,表示这个函数返回一个 int 类型的值,但没有提供任何关于参数的信息。
示例:
// 这是一个旧式的函数声明 int my_function(); // 这意味着 my_function 返回一个 int,参数未知 // 以下也是一个旧式声明,使用了你问的语法 (int) my_other_function(); // 语法上等同于 int my_other_function();
为什么不推荐使用? 这种模糊性是C语言历史上许多bug的根源,调用者不知道需要传递什么参数,编译器也无法进行类型检查。
现代C标准(C99及以后):
int func();这种不带参数列表的声明仍然被保留,但其含义发生了改变:它表示一个函数,接受零个参数。- 如果一个函数接受未知参数,必须使用C语言的可变参数函数机制,即
stdarg.h,并在函数声明中使用省略号 ,int printf(const char *format, ...);。
在现代C编程中,你几乎不应该再使用 (int) 来声明函数,始终使用完整的函数原型,即 返回类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ...);。
总结与对比
| 上下文 | 语法名称 | 作用 | 示例 | 现代C中的使用 |
|---|---|---|---|---|
| 表达式前 | 强制类型转换 | 将一个值的类型临时转换为 int |
int i = (int)3.14; |
常用且必要 |
| 函数声明中 | 旧式函数声明 | 声明函数返回 int 类型,但不说明参数 |
(int) my_func(); |
已过时,不推荐 |
最佳实践
- 类型转换:当你确实需要将一种类型转换为
int时,请使用(int),当你将一个double结果赋值给一个int变量时。 - 函数声明:始终使用现代的、完整的函数原型来声明你的函数,避免使用旧式的、不带参数列表的声明,声明一个返回
int的函数,应该写成int my_function(int a, float b);。
希望这个解释能帮助你彻底理解C语言中 (int) 的用法!
