[WEEK 05]C-関数
ポインタを使用する関数
/* 두 변수의 값을 교환하는 (잘못된) 함수 */
#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;
}
Reference
この問題について([WEEK 05]C-関数), 我々は、より多くの情報をここで見つけました https://velog.io/@shinhojung814/C-함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol