Cの関数について知っておくべきことはすべてありますか?



この記事では、Cの関数というシンプルでありながら非常に基本的で重要な概念を紹介し、その後にデモンストレーションを行います。

この記事では、シンプルでありながら非常に基本的で重要なものを紹介します Cの関数である概念とそれをデモンストレーションでフォローアップします。この記事では、次のポイントについて説明します。

関数は、あらゆるプログラミング言語の構成要素です。簡単に言うと、入力を受け取り、特定のタスクを実行してから出力を返す一連のステートメントの関数です。
関数作成の背後にあるイデオロギーは、特定のタスクを実行する一連の関連ステートメントをバインドすることです。そのため、異なる入力セットに対して同じコードを複数回記述する必要はありません。さまざまな入力に対して関数を呼び出す必要があります。指定された入力に対して指定されたタスクを実行し、出力を返します。関数は何度でも呼び出すことができます。このブログでは、Cプログラミング言語の関数に関するあらゆるニュアンスを学びます。





最も基本的な質問から始めましょう。

Cの関数とは何ですか?

Cの関数は、他のプログラミング言語と同じです。これは、特定のタスクを実行するために結合されるコードのセットです。実行されるコードのセットは中括弧で指定されます。つまり、「{}」です。



Cで関数を書く方法を学ぶ前に、まず利点が何であるかを理解しましょう。

Cの関数の利点

関数の利点は、すべてのプログラミング言語に共通しています。
機能の背後にある主な考え方は、コードの冗長性を減らすことです。プログラムで複数回実行する必要のある機能があるとします。そのため、複数回記述する代わりに、そのタスクの関数を作成して、何度でも呼び出すことができます。もう1つの隠れた利点は、機能のロジックが後で変更された場合に、先に進んで複数の場所で変更する必要がないことです。コードを1か所(つまり関数内)で変更するだけで、プログラム全体に反映されます。

再び追加の利点のモジュール性。すべてを含む大きなコードを書くと、コードの可読性が低下し、管理が困難になります。関数を使用して、コードを個々の機能のセクションに分割できます。これにより、理解と管理が簡単になります。



関数は抽象化も提供します。抽象化では、内部実装を知らなくても関数を呼び出して出力を取得できます。

関数Cのタイプに進む

Cの関数の種類

関数には2つのタイプがあります。
ライブラリ関数
ユーザー定義関数

ライブラリ関数は、strcat()、printf()、scanf()などのCライブラリですでに定義されている関数です。これらの関数を使用するには、適切なヘッダーファイルをインクルードする必要があります。
ユーザー定義関数は、ユーザーが定義する関数です。これらの関数は、コードの再利用性と時間とスペースの節約のために作られています。

関数を作成する利点がわかったので、Cで関数を宣言する方法を理解しましょう。

関数の宣言と定義

関数宣言:

関数宣言の構文:

return_type function_name(data_type arg1、data_type arg2)int add(int x、int y)//関数宣言

関数宣言では、関数の名前、入力パラメーターの数、それらのデータ型、および関数の戻り値の型を指定します。関数宣言は、関数が期待する引数のリストとそのデータ型および関数の戻り値の型についてコンパイラーに通知します。

関数宣言では、パラメーターの名前の指定はオプションですが、データ型の指定は必須です。

int add(int、int)//関数宣言

上記で指定された関数は、2つの整数パラメーターを取ります。

関数定義

 画像-C-Edurekaの機能
int add(int、int)//関数宣言return_type function_name(parameters){関数本体}

上の画像に示されているように、関数定義は2つの部分、つまり関数ヘッダーと関数本体で構成されています

関数ヘッダー: 関数ヘッダーは、セミコロンなしの関数宣言と同じです。関数ヘッダーには、関数名、パラメーター、戻り値の型が含まれています。

  • 戻り値の型: 戻り値の型は、関数によって返される値のデータ型です。関数は値を返す場合と返さない場合があります。その場合は、再調整値のデータ型を指定する必要があります。指定しない場合は、戻り値の型を無効にする必要があります。

  • 関数名: これは、必要なときに必要な場所で関数を呼び出すために使用できる関数の名前です。

  • パラメーター: パラメータは、関数に渡される入力値です。引数のデータ型、それらの順序、および関数に渡される引数の数について説明します。パラメータはオプションです。パラメータなしで関数を使用することもできます。

機能本体: 関数本体は、特定のタスクを実行するステートメントのセットです。関数の機能を定義します。

例:

int add(int x、int y){int sum = x + y return(sum)}

関数を定義して使用する前に、関数を宣言することをお勧めします。 Cでは、同じ場所で関数を宣言および定義できます。

例:

#include int add(int、int)//関数宣言//関数定義int add(int x、int y)//関数ヘッダー{//関数本体int sum = x + y return(sum)} //メイン関数int main(){int sum = add(23、31)printf( '%d'、sum)return 0}

上記の例でわかるように、int sum = add(23、31)ステートメントを使用して関数を呼び出しています。関数からの戻り値はsum変数に格納されます。

先に進む前に、パラメントについて理解するためのもう1つの重要な概念があります。パラメータには次の2つのタイプがあります。

実際のパラメータ :関数の呼び出し中に関数に渡されるパラメーターは、実パラメーターと呼ばれます。たとえば、上記の例の23と31は実際のパラメータです。

仮パラメータ :関数が受け取るパラメーターは、仮パラメーターと呼ばれます。たとえば、上記の例のxとyは仮パラメータです。

さっそく先に進み、Cで関数を呼び出すさまざまな方法を理解しましょう。

関数の呼び出し

関数を呼び出す方法は2つあります。

  • 値で呼び出す
  • 参照による呼び出し

値で呼び出す

値による呼び出しメソッドでは、実際のパラメーターの値が引数として関数に渡されます。実際のパラメーターの値は、仮パラメーターによって変更することはできません。

call be valueメソッドでは、異なるメモリアドレスが仮パラメータと実パラメータに割り当てられます。実際のパラメータの値だけが仮パ​​ラメータにコピーされます。

例:

cでリンクリストを実装する
#include void Call_By_Value(int num1){num1 = 42 printf( 'nInside Function、Number is%d'、num1)} int main(){int num num = 24 printf( 'nBefore Function、Number is%d'、num )Call_By_Value(num)printf( 'nAfter Function、Number is%dn'、num)return 0}

出力

上記の例では、値関数で呼び出す前のnumの値は24です。次に、関数を呼び出して値を渡し、関数内で変更すると、42になります。戻って値を出力すると主関数のnumの24になります。

参照による呼び出し

参照による呼び出しでは、実際のパラメータのメモリアドレスが引数として関数に渡されます。ここで、実パラメータの値は仮パラメータで変更できます。

実際のパラメータと仮パラメータの両方に同じメモリアドレスが使用されます。したがって、仮パラメータの値が変更されると、実際のパラメータにも反映されます。

Cでは、ポインターを使用して参照による呼び出しを実装します。以下の例でわかるように、関数Call_By_Referenceは整数へのポインターを期待しています。

これで、このnum1変数は、実際のパラメータのメモリアドレスを格納します。したがって、num1が指すメモリアドレスに格納されている値を出力するには、間接参照演算子、つまり*を使用する必要があります。したがって、* num1の値は42です。

アドレス演算子&は、任意のデータ型の変数のアドレスを取得するために使用されます。そのため、関数呼び出しステートメント「Call_By_Reference(&num)」では、numのアドレスが渡されるため、numはそのアドレスを使用して変更できます。

#include //関数定義voidCall_By_Reference(int * num1){* num1 = 42 printf( 'nInside Function、Number is%d'、* num1)} //メイン関数intmain(){int num num = 24 printf( 'nBefore Function、Number is%d'、num)Call_By_Reference(&num)printf( 'nAfter Function、Number is%dn'、num)return 0}

出力

この例では、numの値は、main関数内で最初は24です。 Call_By_Reference関数に渡され、値が仮パラメーターによって変更されると、実際のパラメーターに対しても変更されます。これが、関数の後にnumの値を出力するときに42を出力する理由です。

Cのユーザー定義関数のタイプに進む

ユーザー定義のタイプ 関数 Cで

渡される戻り値の型と引数に基づいて、さまざまな種類のユーザー定義関数があります。

引数が渡されず、戻り値がない状態で続行します

1.引数が渡されず、戻り値もありません

構文:

関数宣言:

void function()関数呼び出し:function()関数定義:void function(){ステートメント}

#include void add()void add(){int x = 20 int y = 30 int sum = x + y printf( 'sum%d'、sum)} int main(){add()return 0}

引数は渡されませんが、戻り値で続行します

2引数は渡されませんが、戻り値

構文:

関数宣言:

int function()関数呼び出し:function()関数定義:int function(){ステートメントは}を返します

例:

#include int add()int add(){int x = 20 int y = 30 int sum = x + y return(sum)} int main(){int sum sum = add()printf( 'sum%d'、合計)0を返す}

引数は渡されましたが、戻り値はありません。

3引数は渡されましたが、戻り値はありません

構文:

関数宣言:

void function(int)関数呼び出し:function(a)関数定義:void function(int a){ステートメント}

例:

Javaのセマフォとは
#include void add(int、int)void add(int x、int y){int sum = x + y return(sum)} int main(){add(23、31)return 0}

渡された引数と戻り値で続行します

4渡された引数と戻り値

構文:

関数宣言:

int関数(int)関数呼び出し:function(a)関数定義:int function(int a){ステートメントは}を返します

#include int add(int、int)int add(int x、int y){int sum = x + y return(sum)} int main(){int sum = add(23、31)printf( '%d' 、sum)return 0}

ここで、プログラムを作成するために重要なCライブラリ関数を簡単に見てみましょう。

Cライブラリ関数

ライブラリ関数はCの関数であり、事前定義されており、デフォルトで存在します。プログラムに特定のヘッダーファイルをインクルードするだけで、そのヘッダーファイルで定義されている関数を使用できます。各ヘッダーファイルは、特定の種類の機能を提供します。ヘッダーファイルの拡張子は.hです。

たとえば、printf / scanf関数を使用するには、標準の入出力に関する機能を提供するstdio.hをプログラムに含める必要があります。

以下はヘッダーファイルのリストです。

1stdio.h標準の入出力ヘッダーファイル
2minting.hコンソール入出力ヘッダーファイル
3string.hget()、puts()などの文字列関連のライブラリ関数。
4stdlib.hmalloc()、calloc()、exit()などの一般的なライブラリ関数。
5math.hsqrt()、pow()などの数学演算関連関数。
6time.h時間関連の機能
7ctype.h文字処理機能
8stdarg.h可変引数関数
9signal.hシグナル処理機能
10setjmp.hジャンプ機能
十一locale.hロケール機能
12errno.hエラー処理関数
13assert.h診断機能

これで、上記のC関数を実行した後、関数のすべてのニュアンスと、それをC言語で実装する方法を理解できたはずです。このブログがあなたにとって有益で付加価値があることを願っています。

これで、「FunctionsInC」に関するこの記事は終わりです。詳細を知りたい場合は、 、信頼できるオンライン学習会社。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Hibernate&SpringなどのさまざまなJavaフレームワークに加えて、コアJavaコンセプトと高度なJavaコンセプトの両方についてトレーニングするように設計されています。

質問がありますか?このブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。