Cプログラミングでは、function_nameと変数の違いは何ですか?


答え 1:

関数名は、作成する関数に割り当てる名前であり、コードの1行から多くの行を占める可能性があります。関数は、0から多数のパラメーターを受け取ることができます。ただし、1つだけを返します。

変数は基本的に、情報を受信および保存するために割り当てられた名前の付いたメモリ空間であり、関数にパラメータとして渡すこともできます。通常、変数は特定の型(整数、文字列、文字など)になります。


答え 2:
Cプログラミングでは、function_nameと変数の違いは何ですか?

それらはまったく異なる2つのものです。

関数名(アンダースコアは不要、単なるフレーズです)は、関数が宣言または定義されたときに決定される関数の名前です。

変数は-まあ、Cの「変数」が何であるかを完全に明確にするわけではありません。C標準では、通常の意味で「変数」という言葉を使用していません。 Cは、オブジェクトという用語を「実行環境のデータストレージの領域、その内容は値を表すことができる」と定義しています。名前付きの宣言されたオブジェクトは、「変数」と合理的に呼ぶことができますが、「変数」であるかどうかについてのコンセンサスはありません。

関数を呼び出すことができます。オブジェクトは値を保持できます。


答え 3:

主な違いは、関数名に関連付けられた関数がコンパイラーによって自動的にセットアップされることです。 Cでは、関数は「ファーストクラスのオブジェクト」ではありません。関数を変更/結合し、数字や文字列でできるように返す関数に渡すことはできません)。

変数は、ファーストクラスのオブジェクト(整数、文字、浮動小数点数など)の値を保持します。関数へのポインタを持つことができます。これは、関数を格納および渡したり、関数)、ただし、ファーストクラスオブジェクトの場合のように、実行時に関数自体の「値」を変更することはできません。

したがって、これらは変数とほとんど同じように見えますが、アドレスを取得する以外は、変数で呼び出すことができます。 main = {something…}と言うことはできません。メイン関数を定義して、コンパイラに名前とコードの背後での関連付けを行わせるだけです。

実行時に関数の値を定義できるHaskellなどの言語は、このため「関数型」言語と呼ばれます。簡単な例は、税率を渡すmake add adderと呼ばれる関数です。これは、渡されるアイテムに固定税率を追加する関数を返します。

addstatetax = maketaxadder(.05)

addlocaltax = maketaxadder(.015)

ここでは、実行時に呼び出すことができる2つの関数を作成しました。 addstatetax(100)は105を返し、addlocaltax(100)は101.50を返します。

変数addstatetaxには、数値を受け取り、5%を追加した別の値を返す関数の「値」があります。 Cでも構造体と関数ポインターを使用して同様のことを行うことができますが、非常に難しく(Cでの関数ポインター型の定義は非常に難しい)、エラーが発生しやすくなります。


答え 4:

関数名は本質的にポインターであるため、次のようなことができます:void(* func)(int); func = myVoidFunc; //またはalternativefunc =&myVoidFunc;

これが本当に大きな違いです。ポインタを通常どおりに使用する場合、次のようにアドレスの(アンパサンド)演算子を使用するかどうかは非常に重要です。

int * ptr = myVar; // andint * ptr =&myVar;

ほぼ確実に非常に異なる動作になりますが、それ以外は、関数名は実際には単なるポインターです。まったく意味をなさない詳細を説明しますが、あなたの観点から、そして私の観点からは、きっとそうなると確信しています。

別の違いは、もちろん、関数名を尊重できないこと、ポインター演算を実行できないこと、または少なくともできる場合は非常に危険なことなどです。