ベース-関数、パラメータ(ポインタ、配列、構造体)


関数には使用目的があり、各関数には機能があるはずです.
この場合,重要な部分は呼び出し時に渡されるパラメータと関数から渡されるパラメータである.
どのタイプのパラメータがあるかを確認します.
パラメータとは
void helloNumber(int num1)
{
    printf("Hello, %d\n", num1);    
}
int main()
{
	helloNumber(123);
	return (0);
}
결과값 : Hello, 123
上のコードを見てください.
main関数はhelloNumber関数を呼び出します.
このとき中括弧内の123を関数호출할 때 전달해주는인수と呼ぶ.
パラメータ
helloNumber関数を定義する場合、カッコのint num 1はパラメータです.함수 바깥에서 전달받는 값이 저장되는 변수および매개변수として定義される.
上記のパラメータは関数にのみ適用され、関数外で定義されたパラメータはパラメータ伝達体として使用できません.
(つまり、値を「関数のみに渡す」ということです)
ポインタパラメータ
関数から複数の値を返す場合は、次の操作を実行できますか?
return 10 20 30;
答えはダメCでは、関数の戻り値は1つしか返されません.
彼に対する対策はポインタパラメータだ.
#include <stdio.h>
void swapNumber(int *first, int *second)
{
    int temp; 
	temp = *first;
    *first = *second;
    *second = temp;
}

int main()
{
    int num1 = 10;
    int num2 = 20;
    swapNumber(&num1, &num2); 
    printf("%d %d\n", num1, num2);
    return 0;
}
前述したようにnum 1とnum 2の値を関数で置き換える場合は、次の操作を行います.
ポインタ変数をパラメータとする関数を使用すると、메모리 주소에 접근하는 방법があります.
ポインタパラメータを使用すると、*(에너리스크)を逆参照して値にアクセスできます.
アレイパラメータ
つまり,上のパラメータからポインタを得ることができれば,配列も得ることができる.
使用例を次に示します.
#include <stdio.h>

void printArray(int *arr, int count)    // 매개변수를 포인터로 지정하여 배열을 받음
{
    for (int i = 0; i < count; i++)
    {
        printf("%d ", arr[i]);
    }

    printf("\n");
}

int main()
{
    int numArr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    printArray(numArr, sizeof(numArr) / sizeof(int));    // 배열과 요소의 개수를 넣음

    return 0;
}
注意すべき点は,ポインタでは配列の大きさが分からないので,同時に大きさを渡すことである.
こうぞうパラメータ
関数に渡すパラメータが名前、年齢、電話番号のように多い場合は、どうすればいいですか?
その時、あることを思い出した.構造体です.
パラメータとして構造体を使用する関数を宣言する場合、フォーマットは次のとおりです.
반환값자료형 함수이름(struct 구조체이름 매개변수)
{
}
関数を呼び出すと、構造体変数がパラメータとして渡されると、構造体のすべてのメンバーがコピーされて渡されます.
しかし、構造体が大きくなったらどうなるのでしょうか.レプリケーションが必要な量が増えているため、効率的ではありません.
ポインタを渡して不要なコピー量を減らすのが望ましい(アドレス値のみがコピーされるため)
構造パラメータポインタ
반환값자료형 함수이름(struct 구조체이름 *매개변수)
{
}
以上のように、構造体パラメータの前に*(Ester Risk)を追加することは、構造体ポインタをパラメータとする関数となる.
これにより、不要な構造全体のコピーを防止できます.
メモリのアドレス値が渡されるため、メンバーの値は関数内で変化しますが、関数外でも同じように変化します.