c语言参数隐式转换,Implicit conversions(隐式转换)

当预期在不同类型的值的上下文中使用表达式时,可能会发生转换:

int n = 1L; // expression 1L has type long, int is expectedn = 2.1; // expression 2.1 has type double, int is expectedchar *p = malloc(10); // expression malloc(10) has type void*, char* is expected

转换发生在以下情况:

按照分配进行转换

在赋值运算符中,右侧操作数的值被转换为左侧操作数的非限定类型。

在标量初始化中,初始化表达式的值被转换为被初始化的对象的非限定类型

在函数调用表达式中,对于具有原型的函数,将每个参数表达式的值转换为相应参数的非限定声明类型

在return语句中,操作数的值return被转换为具有函数返回类型的对象

请注意,除转换外,实际分配也会从浮点类型中移除额外的范围和精度,并禁止重叠; 这些特性不适用于转换,就像通过分配一样。

默认参数优化

在调用时的函数调用表达式中。

1)没有原型的功能

2)可变参数函数,其中参数表达式是与省略号参数匹配的尾随参数之一

整数类型的每个参数都经过整数提升(参见下文),并且每个类型的参数都float被隐式转换为类型double。

int add_nums(int count, ...);int sum = add_nums(2, 'c', true); // add_nums is called with three ints: (2, 99, 1)

请注意,float complex和float imaginary没有提升到double complex和double imaginary在这种情况下。

通常的算术转换

以下算术运算符的参数经过隐式转换,以获得公共实数类型,这是执行计算的类型:

二进制算术*,/,%,+, -

关系运算符,<=,> =,==,!=

二进制按位运算&,^,|,

条件操作符?:

1)如果一个操作数是long double,long double complex或long double imaginary,另一个操作数被隐式转换如下:

整数或实际浮动类型 long double

复杂类型 long double complex

虚构类型 long double imaginary

2)否则,如果一个操作数是double,double complex或double imaginary,另一个操作数被隐式转换如下:

整数或实际浮动类型 double

复杂类型 double complex

虚构类型 double imaginary

3)否则,如果一个操作数是float,float complex或float imaginary,另一个操作数被隐式转换如下:

整数类型为float(唯一可能的实际类型是float,保持原样)

复杂类型依然存在 float complex

虚构类型仍然存在 float imaginary

4)否则,两个操作数都是整数。在这种情况下,首先,两个操作数都进行整数升级(见下文)。然后

如果促销后的类型相同,则该类型是常见类型

否则,如果促销后的两个操作数具有相同的签名(均为有符号或无符号),则具有较低转换等级的操作数(请参见下文)会隐式转换为具有较高转换等级的操作数的类型

否则,签名会有所不同:如果具有无符号类型的操作数的转换等级大于或等于有符号操作数类型的等级,则带符号类型的操作数将隐式转换为无符号类型

否则,签名是不同的,并且带符号的操作数的等级大于无符号的操作数的等级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,隐式转换和显示转换是两种不同的类型转换方式。 1. 隐式转换Implicit Conversion): 隐式转换是指在表达式中自动进行的类型转换,无需显式地指定转换操作。Python中的隐式转换主要发生在数值运算和比较操作中。例如,当不同类型的数值进行运算时,Python会自动将其中一个数值转换为另一个数值的类型,以便进行运算。另外,在比较操作中,如果比较的两个对象类型不同,Python也会自动进行类型转换,然后再进行比较。 2. 显式转换(Explicit Conversion): 显式转换是指通过函数或者操作符显式地将一个类型转换为另一个类型。在Python中,可以使用内置的函数来进行显式转换,如int()、float()、str()等。这些函数可以将其他类型的对象转换为整数、浮点数、字符串等。此外,还可以使用操作符进行显式转换,如使用"+"操作符将整数转换为字符串。 下面是一些示例代码来说明隐式转换和显式转换的区别: 隐式转换示例: ```python a = 10 b = 3.14 c = a + b # 隐式将整数a转换为浮点数,然后进行相加 print(c) # 输出结果为13.14 ``` 显示转换示例: ```python a = 10 b = "20" c = a + int(b) # 显式将字符串b转换为整数,然后进行相加 print(c) # 输出结果为30 ``` 需要注意的是,在进行显式转换时,如果转换的类型不匹配,可能会导致错误或者意外的结果。因此,在进行类型转换时,需要确保转换的操作是安全和合理的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值