我正在阅读C编程语言II,并且在运算符优先级表中,它们将转换运算符显示为(type)
,因此它让我很烦恼。
强制转换运算符只是
()
类似于函数运算符,还是整个类型包括(int)
,(float)
......?如果是这样,是否意味着我可以自己用
typedef
声明一个新的运算符?
答案 0 :(得分:4)
类型转换是通过(type)
完成的,其中type
是本机类型,如int
或char *
,或类型 - 通过typedef
创建的别名。
函数调用是通过()
运算符完成的。
它们可能看起来很相似,但却非常不同,当然放在不同的地方。例如,(type) expression
是类型转换,而expression()
是函数调用。您当然可以组合强制转换和调用运算符,例如(type) expression()
,这意味着您调用函数,然后转换函数的返回值。
如果你想知道最后一个,混合转换和调用表达式,那是因为函数调用比转换更高operator precedence,所以调用将首先发生。
答案 1 :(得分:1)
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;
}