私はCプログラミング言語IIを読んでいます。演算子優先順位表では、キャスト演算子を(type)
と表示しています。C:()または(int)のキャスト演算子?
だけ
()
機能のオペレータのようなキャスト演算子であるか、それが(int)
のような全体としてのタイプを含む、(float)
...?もしそうなら、私は新しい演算子を自分で
typedef
と宣言できますか?
私はCプログラミング言語IIを読んでいます。演算子優先順位表では、キャスト演算子を(type)
と表示しています。C:()または(int)のキャスト演算子?
だけ
()
機能のオペレータのようなキャスト演算子であるか、それが(int)
のような全体としてのタイプを含む、(float)
...?もしそうなら、私は新しい演算子を自分で
typedef
と宣言できますか?
タイプキャストはtype
がint
またはchar *
、またはtypedef
を通じて作成タイプエイリアスのようなネイティブ型のいずれかである(type)
、を介して行われます。
ファンクションコールは()
演算子で行われます。
これらは類似しているかもしれませんが、非常に異なっており、もちろん別の場所に配置されています。たとえば、(type) expression
は型キャストで、expression()
は関数呼び出しです。もちろん、キャスト演算子と(type) expression()
のような呼び出し演算子を組み合わせることができます。つまり、関数を呼び出して、関数の戻り値をにキャストします。
最後のキャストと呼び出し式が混乱しているのは、関数呼び出しがキャストよりも高いoperator precedenceであるためです。呼び出しが最初に行われるためです。
()、その前に、関数名との組み合わせでのみ有効である(あなたはパラメータなしで関数を呼び出す意味空1、)関数呼び出し式です
このように:
#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;
}
しかし、これでは、例えば同様に、(天然型または1のいずれかが
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;
}
"()は、その前の関数名との組み合わせでのみ有効です。isは関数呼び出し式ですつまり、パラメータなしで関数を呼び出すことを意味します) "その他の用途:' inf foo2(); 'は、そのパラメータに関する情報を持たない関数を宣言します。 '()'は関数ポインタへのキャストにも使われます。 '(int(*)())'。変数宣言 'int * z()'もあります。ここでzは関数ではなく、[関数ポインタ]です(http://cdecl.ridiculousfish.com/?q=int+*z%28%29)。 – chux
Cはここで少し混乱します。同じ構文を使用しますが、コンテキストによって異なる意味を持つ演算子がいくつか存在するためです。事態をさらに悪化させるために、同じ構文を演算子でもないものに使用することができます。これは、C言語のすべてで使用されている()
の場合に特に当てはまります。
()
は、次のいずれかを意味するかもしれません。これはいわゆるプライマリ式です。これは、すべての演算子より優先される基本的なもののための派手な言葉です。
"すべてのタイプにキャスト演算子が1つしかありません。"普遍的なキャスト演算子が1つ存在するように聞こえます。 '(int)' '(double)' '(foo_T)'は3つの異なる演算子のように見えます。おそらく、あなたの意図をより明確に表現するための言葉ですか? – chux
これは、関数を呼び出して型キャストの関数を宣言するためにも使用されます。
機能例:だから型鋳造で
public void show(){
printf("this is function");
}
...
float a= 1.22;
in b = (int)a;
は "()" 右、キャスト演算子ですか? –
@Best_Nameいいえ、 '()'は関数呼び出し式で、 '(type)'はキャストです。 '()expression'を書くだけでは無効です。コンパイラエラーが発生します。 –
so(int)、(float)、(sometypeidefined)は演算子ですか? –