C言語の関数に対する詳しい回答

関数とは何ですか

コンピューター サイエンスでは、サブルーチン (英語: Subroutine、プロシージャ、関数、ルーチン、メソッド、サブプログラム、呼び出し可能ユニット) は、1 つまたは複数のステートメント ブロックで構成される、大きなプログラム内のコードの特定の部分です。これは特定のタスクを完了する責任を負い、他のコードからは比較的独立しています。一般に、入力パラメータ戻り値がありプロセスのカプセル化詳細の非表示を提供します。これらのコードは多くの場合、ソフトウェア ライブラリとして統合されます。

C言語における関数の分類

  • ライブラリ関数:C言語内で提供される関数。
  • ユーザー定義関数:自分で作成した関数。

ライブラリ関数

C 言語のコードを記述するときは、常にいくつかの関数を頻繁に使用します。
たとえば、次のとおりです。

  • 情報を特定の形式で画面に出力します (printf)
  • プログラミングの過程では、文字列のコピー (strcpy) を頻繁に行いますし、プログラミング中に計算も行い、常に n の k 乗 (pow) などの演算を計算します。

上記のような基本的な関数は、プログラムを書くときによく使われます。したがって、C 言語の基本ライブラリには、プログラマがソフトウェアを開発するのに便利な一連の同様のライブラリ関数が提供されています。
では、ライブラリ関数を学ぶにはどうすればよいでしょうか?
ライブラリ関数の使い方は特別に覚える必要はなく、どのように使われるかを調べるだけで済みます。
おすすめのWebサイトとアプリはこちら

これらのメソッドを通じて、関数名、仮パラメータ、必要なヘッダー ファイル、戻り値、その他の必要な情報などの情報を見つけることができます。
C 言語で一般的に使用されるライブラリ関数を簡単にまとめると、次のとおりです。

  • I/O機能
  • 文字列操作関数
  • 文字操作関数
  • 記憶操作機能
  • 時刻/日付関数
  • 数学関数
  • その他のライブラリ関数

**注意: **ライブラリ関数
を使用する場合、#include に対応するヘッダー ファイルをインクルードする必要があります。

カスタム関数

カスタム関数はプログラマが独自に設計した関数で、関数名、戻り値の型、仮引数などは通常の関数と同じです。
関数の構成:

ret_type fun_name(para1, * )
{
    
    
 statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1    函数参数

関数を使用して最大 2 つの数値を見つけます

//使用函数求两个数的最大值
#include<stdio.h>
int get_Max(int x, int y)
{
    
    
	return (x > y ? x : y);
}
int main()
{
    
    
	int a, b;
	scanf("%d %d", &a, &b);
	int num=get_Max(a, b);
	printf("%d", num);
	return 0;
}

関数パラメータ

引数

  • 実際に関数に渡されるパラメータを実パラメータと呼びます。
  • 実際のパラメータは、定数、変数、式、関数などです。
  • 関数が呼び出されるとき、これらの値を仮パラメータに渡すために、それらはすべて明確な値を持っている必要があります。

形参

  • 仮パラメータは、関数名の後の括弧内の変数を指します。これは、仮パラメータは、関数が呼び出されたときにのみインスタンス化される(メモリ単位が割り当てられる)ため、仮パラメータと呼ばれます。
  • 仮パラメータは関数呼び出しの完了後に自動的に破棄されるため、仮パラメータは関数内でのみ有効です。
//交换两个整数
#include<stdio.h>
void exchange(int* pa, int* pb)
{
    
    
	int temp = *pa;
	*pa = *pb;
	*pb = temp;
}

int main()
{
    
    
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	exchange(&a,&b);
	printf("a=%d,b=%d", a, b);
	return 0;
}

仮パラメータがインスタンス化されると、それは実際には実パラメータの一時コピーと同等になります。

関数呼び出し

値による呼び出し

関数の仮パラメータと実パラメータは異なるメモリ ブロックを占有し、仮パラメータを変更しても実パラメータには影響しません。

住所で電話をかける

  • アドレスによる呼び出しとは、関数の外で作成した変数のメモリアドレスを関数の引数に渡すことで関数を呼び出す方法です
  • この方法でパラメーターを渡すと、関数と関数の外部の変数との間に実際の接続を確立できます。つまり、関数の内部で関数の外部の変数を直接操作できます。

ネストされた呼び出しと関数の連鎖アクセス

関数と関数は、実際のニーズに応じて組み合わせることができます。つまり、関数は相互に呼び出します。

ネストされた呼び出し

#include<stdio.h>
void new_line()
{
    
    
    printf("haha\n");
}
void th_line()
{
    
    
    int i = 0;
    for (i = 0; i < 3; i++)
    {
    
    
        new_line();
    }
}
int main()
{
    
    
    th_line();
    return 0;
}

関数は入れ子にして呼び出すことができますが、定義を入れ子にすることはできません

チェーンアクセス

ある関数の戻り値を別の関数のパラメータとして使用することをチェーンアクセスと呼びます。

#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char arr[20] = "hello";
	int ret = strlen(strcat(arr, "tong"));
	printf("%d\n", ret);
	return 0;
}

関数の宣言と定義

関数宣言

  • 関数の名前、パラメーター、戻り値の型はコンパイラーに伝えられますが、関数の宣言では関数の名前、パラメーター、戻り値の型が存在するかどうかを決定できません。
  • 関数の宣言は通常、関数を使用する前に行われます。使用前に宣言する必要があります。
  • 関数宣言は通常、ヘッダー ファイルに配置されます。

関数定義

関数の定義は、関数の特定の実現を指し、関数の関数実現を説明します。

int add(int x,int y)
{
    
    
    return x+y;
}

作業では、Add 関数を追加モジュールとして作成します。main関数でAddのヘッダファイルを呼び出すだけです。コードを分けて書くとロジックが明確になります。

関数の再帰

再帰とは何ですか

  • プログラムが自分自身を呼び出すプログラミング手法は、再帰と呼ばれます。
  • 再帰は、プログラミング言語のアルゴリズムとして広く使用されています。
  • プロセスまたは関数には、その定義または説明の中で直接的または間接的に自分自身を呼び出すメソッドがあります。通常、大規模で複雑な問題を層ごとに、元の問題と同様の小規模な問題に変換して解決します。再帰的戦略は A のみです。少数のプログラムを使用して、問題解決プロセスで必要な複数の繰り返し計算を記述することができるため、プログラム内のコード量が大幅に削減されます
  • 再帰についての主な考え方は、**大きなものを小さなものに変える**です。

再帰に必要な 2 つの条件

  • 制約があり、この制約が満たされると再帰は続行されません。
  • この制限は、再帰呼び出しのたびにどんどん近づいていきます。

このブログでは主に関数の定義、使い方、再帰の概念について紹介していきますが、次回は関数の使い方を強化するために関数に関するトピックをいくつか書いていきたいと思います。次回お会いしましょう。

おすすめ

転載: blog.csdn.net/weixin_63284756/article/details/130389926