C言語でのキャスト演算子について現在勉強しています。仕組みは分かったのですが、キャストを現場で用いる機会はあるのでしょうか?
もしありましたら、具体例を上げていただければ幸いです。
よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/18 13:19
回答2件
0
(知りたいのはこういう話ではないのかもしれないが)
すっごくシンプルな話として,
C
1//何か計算した結果を返す関数 2float F(){ ... } 3 4int main(void) 5{ 6 float f = F(); 7 int A = f; //おおっと…? 8 //以降,Aを使って何かするコードがあるが,単純に整数に丸めたAを使っているのは大丈夫なのか? 9}
みたいなコードを書いたとしたら,
コンパイラが「float を int に突っ込もうとしているけど大丈夫なん?」とか警告してくれるかもしれない.
同様に,このコードを見た人も「これはOKなん? ミスではなく?」って不安になる.
「この変換は,コードを書いた者が意図したものであるぞ」ということを明確にするために,
int A = (int)f;
と書く.
(「コンパイラの警告を消すために」書くのではないよ)
投稿2021/10/19 01:42
総合スコア11996
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/19 08:27
2021/10/19 08:37
0
ベストアンサー
C の標準ライブラリ関数 qsort はどんな配列でもソートします。
配列の要素は int でも、double でも、char * でも、あるいは構造体への
ポインタでもなんでも構いません。ただし、配列の2つの要素の比較関数は、
qsort を呼び出す側で用意しなくてはいけません。
比較関数は、2つの要素のアドレスを const void * の形で引数にとります。
それらを int * や double * などにキャストしないと、
配列の要素は参照できません。そこで、キャストが必要になります。
他には、ソケットを使ったネットワークプログラミングで用意されている関数は、
ネットワークアドレスを struct sockaddr * で引数に取りますが、
実際のネットワークアドレスは様々で struct sockaddr_in だったりするので
キャストが必要になります。
C の場合、void * はどんなポインタにでもキャスト無しで変換できるので、
malloc の返却値をキャストする必要はありませんが、同じコードを C++ コン
パイラでコンパイルする場合のためにキャストを書いたりします。
投稿2021/10/18 14:23
総合スコア8224
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。