【问题标题】:Implicit casting in function arguments, what happens inside this one?函数参数中的隐式转换,这里面发生了什么?
【发布时间】:2011-02-16 00:43:15
【问题描述】:

看,我了解到函数的基本类型被提升为 int,float 被提升为 double,但是等一下,如果我将 char 传递给如下函数:

char character; my_func (character)

void my_func(字符缓冲区)

每次我提到缓冲区时都是一个整数???如果是,请稍等,我编写的所有将缓冲区称为 char 的代码呢?它是从 int 转换为 char 吗? 指针、数组和结构枚举联合等呢? 我对此非常害怕,因为我猜想使用其他类型代替 int 是一个错误,因为我所做的一切都会被转换为 int。对吧?

非常感谢。

【问题讨论】:

  • 没有。当您将一种类型分配给另一种类型时,就会发生强制转换。这里没有int。缓冲区是一个字符,并且总是应该是一个字符。您无需担心。

标签: c casting


【解决方案1】:

仅当您使用没有原型的旧式代码(如果您的编译器支持)或使用... 可变参数函数时,函数调用中基本类型的提升才有意义。在您的情况下,您有一个原型,并且它匹配,因此没有转换或提升。

无论如何,提升只适用于数值类型——它不适用于指针、数组、结构或联合。

【讨论】:

  • 是的,我的天哪,我忘记了没有这个词,看#因为函数调用的参数是一个表达式,所以当参数传递给函数时也会发生类型转换。在没有函数原型的情况下,char 和 short 变成了 int,float 变成了 double。这就是我们将函数参数声明为 int 和 double 的原因,即使函数是用 char 和 float 调用的。 # K&R C BOOK,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-06-30
  • 2020-03-12
  • 2023-04-10
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多