在C :()或(int)中转换运算符?

时间:2016-07-06 06:16:27

标签: c

我正在阅读C编程语言II,并且在运算符优先级表中,它们将转换运算符显示为(type),因此它让我很烦恼。

  

强制转换运算符只是()类似于函数运算符,还是整个类型包括(int)(float) ......?

     

如果是这样,是否意味着我可以自己用typedef声明一个新的运算符?

4 个答案:

答案 0 :(得分:4)

类型转换是通过(type)完成的,其中type是本机类型,如intchar *类型 - 通过typedef创建的别名。

函数调用是通过()运算符完成的。

它们可能看起来很相似,但却非常不同,当然放在不同的地方。例如,(type) expression是类型转换,而expression()是函数调用。您当然可以组合强制转换和调用运算符,例如(type) expression(),这意味着您调用函数,然后转换函数的返回值

如果你想知道最后一个,混合转换和调用表达式,那是因为函数调用比转换更高operator precedence,所以调用将首先发生。

答案 1 :(得分:1)

C在这里有点令人困惑,因为有几个运算符使用相同的语法但具有不同的含义,具体取决于上下文。更糟糕的是,相同的语法可以用于甚至不是运算符的东西。对()尤其如此,它在整个C语言中使用。

()可能意味着以下之一:

  • 带括号的表达式。这是一个所谓的主表达式,对于优先于所有运算符的基本内容来说,这是一个奇特的词。
  • 演员。所有类型只有一个强制转换操作符。你不能在C中重新定义运算符的含义(但你可以在C ++中,通过运算符重载)。
  • 函数调用运算符。
  • 复合文字声明的一部分。
  • 或者它可以是语句的一部分,函数声明,类似函数的宏声明/调用,某些变量声明的一部分等等。它只是核心语言语法的一部分,并且在这里和那里出现。

答案 2 :(得分:1)

这用于调用函数和声明类型转换函数 功能示例:

public void show(){
  printf("this is function");
}

...在类型转换中

float a= 1.22;
in b = (int)a;

答案 3 :(得分:0)

()只有在它之前与函数名结合才有效,是一个函数调用表达式(一个空表示,意味着你调用没有参数的函数)

像这样:

#include <stdio.h>

int main(void)
{
int bar = foo(); // foo is called with no parameters
printf("bar:%d",bar);
return 0;
}

int foo(void) {
return 3;
}

但是,通过在括号内使用Type表达式(本机类型或通过typedef定义的表达式)来完成转换,例如在此:

#include <stdio.h>

int main(void) {
int foo = (int) 19.21;
printf("foo = %d", foo); // Will print 19 because 19.21 (double literal) was cast to int
return 0;
}