Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我应该在括号之间写些什么来定义我希望变量更改为的数据类型?_C - Fatal编程技术网

C 我应该在括号之间写些什么来定义我希望变量更改为的数据类型?

C 我应该在括号之间写些什么来定义我希望变量更改为的数据类型?,c,C,如果我有一个变量float var1=157.1并且想要在int中转换它,我会做intvar2=(int)var1 我想知道其他类型的数据,例如long int,short int,无符号short int,long double等等 我尝试了long int var2=(long int)var1,它似乎是有效的,但我不确定它在语法上是否正确。如果是的话,我假设其他所有类型都是一样的,也就是说,只有数据类型及其属性由空格分隔。如果不是,我想知道是否有某种类型的列表。这是C cast操作符,但操

如果我有一个变量
float var1=157.1并且想要在int中转换它,我会做
intvar2=(int)var1

我想知道其他类型的数据,例如
long int
short int
无符号short int
long double
等等


我尝试了
long int var2=(long int)var1,它似乎是有效的,但我不确定它在语法上是否正确。如果是的话,我假设其他所有类型都是一样的,也就是说,只有数据类型及其属性由空格分隔。如果不是,我想知道是否有某种类型的列表。

这是C cast操作符,但操作通常是“类型转换”、“转换”或“重铸”。这是编译器请求特定转换的指令

强制转换时,可以指定任何有效的C类型,因此:

int x = 10;
unsigned long long y = (unsigned long long) x;
在许多情况下,这种转换可以隐式地、自动地完成,因此并不总是必要的,但在其他情况下,您必须强制执行。例如:

int x = 10;
float y = x; // Valid, int -> float happens automatically.
不过,您可能会被意外发现:

int x = 10;
float y = x / 3; // y = 3.0, not 3.333, since it does integer division before casting
您需要在哪里施放才能获得正确的结果:

int x = 10;
float y = (float) x / 3; // 3.33333...
请注意,当使用指针时,这是一个完全不同的游戏:

int x = 10;
int* px = &x;
float* y = (float*) px; // Invalid conversion, treats int as a float
一般来说,C相信你知道自己在做什么,所以你可以很容易地击中自己的脚。根据定义,“编译”在语法上是有效的,但正确执行而不崩溃则是另一个问题。任何没有被C“规则手册”(C标准)指定的东西都被称为C,因此您需要知道自己何时违反了规则,如最后一个示例中所示


有时违反规则是必要的,比如依赖于C任意重铸值的能力的,我不知道具体的术语。我的问题是,有两个单词的长型字体是否可以放在括号中?这:包含您可能会发现有趣的信息。@Code学徒这更像是一个政府机构拒绝接受您的表格,因为您用了错误的墨水颜色。@tadman您的答案非常有用然而,我的问题的答案是明确的,在你的评论中,“任何东西都可以进入那里,如果它是有效的C类型,那么长*或无符号长都可以”,所以如果你更新你的答案,我可以接受它不是正式称为“类型转换”。这个短语在C标准中没有出现。请注意,对于数字类型,通常不需要强制转换<代码>整数x=42;双y=x
完全有效,并执行隐式转换。@KeithThompson这里更合适的术语是什么?@KeithThompson The(§6.5.4)只对“强制转换运算符”说话,这就是它的具体含义。括号中的类型名称是“强制转换运算符”。包含强制转换运算符的表达式是强制转换表达式(尽管出于技术原因,该语法术语适用于不包含强制转换运算符的表达式)。该操作可以称为“强制转换”、“转换”或“显式转换”。我个人倾向于避免使用“类型铸造”一词;这是发生在演员身上的事情,“类型”这个词没有任何意义。