[WEEK 05]C-関数

6150 ワード

ポインタを使用する関数

/* 두 변수의 값을 교환하는 (잘못된) 함수 */

#include <stdio.h>

int swap(int a, int b) {
    int temp = a;

    a = b;
    b = temp;

    return 0;
}

int main() {
    int i, j;

    i = 3;
    j = 5;

    printf("함수 호출 이전: i: %d, j: %d \n", i, j);
    swap(i, j);
    printf("함수 호출 이후: i: %d, j: %d \n", i, j);

    return 0;
}
関数呼び出し前:i:3,j:5
関数呼び出し後:i:3,j:5
swap()関数の変数a,bは内部宣言の変数であるため,結果は変わらない.
/* 올바른 변수 교환 함수 */

#include <stdio.h>

int swap(int *a, int *b) {
    int temp = *a;

    *a = *b;
    *b = temp;

    return 0;
}

int main() {
    int i, j;

    i = 3;
    j = 5;

    printf("함수 호출 이전: i: %d, j: %d \n", i, j);

    swap(&i, &j);

    printf("함수 호출 이후: i: %d, j: %d \n", i, j);
    
    return 0;
}
任意の関数が変数/配列の値を変更するには、関数の係数がそのタイプへのポインタを使用する必要があります.
上記の関数は、iおよびjのアドレス値をaおよびbに伝達し、aおよびbがiおよびjを指すようにする.
したがって、変数iおよびjを変更するのではなく、iおよびjのアドレス値を変更するだけで、変数に格納された値が変更される.

関数のプロトタイプ

/* 함수의 원형 */

#include <stdio.h>

// 함수의 원형
int swap(int *a, int *b);

int main() {
    int i, j;
    i = 3;
    j = 5;

    printf("함수 호출 이전: i: %d, j: %d \n", i, j);

    swap(&i, &j);

    printf("함수 호출 이후: i: %d, j: %d \n", i, j);

    return 0;
}

int swap(int *a, int *b) {
    int temp = *a;

    *a = *b;
    *b = temp;

    return 0;
}
使用する関数を関数のプロトタイプで伝達します.

パラメータとして配列を受信

/* 배열을 인자로 받기 */

# include <stdio.h>

int add_number(int *parr);

int main() {
    int arr[3];
    int i;

    // 사용자로부터 3개의 원소를 입력 받는다.
    for (i = 0; i < 3; i++) {
        scanf("%d", &arr[i]);
    }

    add_number(arr);

    printf("배열의 각 원소: %d, %d, %d", arr[0], arr[1], arr[2]);

    return 0;
}

int add_number(int *parr) {
    int i;

    for (i = 0; i < 3; i++){
        parr[i]++;
    }

    return 0;
}