728x90
- 값에 의한 전달(Call By Value)
호출 함수와 피호출 함수의 인자 값은 같지만 메모리는 독립적
int Add(int x, int y){
int x = x + y;
return z;
}
int main(void){
int x = 3;
int y = 5;
int sum = Add(x, y);
printf("%d", sum); //8
return 0;
}
- 참조에 의한 전달(Call By Reference)
호출 함수와 피호출 함수의 인자는 같은 개체
호출 함수에서 메모리 주소를 전달 (포인터 매개 변수 사용)
void swap(int *x, int *y){
int temp = *x;
*x = *y;
*y = temp;
}
int main(void){
int x = 3;
int y = 5;
swap(&x, &y);
printf("%d %d", x, y); //5 3
return 0;
}
- 문자열 매개변수
void PrintStr(char *s){
printf("%s", s); //Hello
}
int main(void){
char str[10] = "Hello";
PrintStr(str);
return 0;
}
- 문자열 포인터 매개변수
void swap_ptr(char** x, char** y){ //포인터의 주소를 받아야 하므로
char *tmp = *x;
*x = *y;
*y = *tmp;
}
int main(void){
char *s1 = "ABCD";
char *s2 = "EFGH";
swap_ptr(&s1, &s2);
return 0;
}
- 배열 매개변수
void PrintArray(int arr[], int count){
for(int i=0; i<count; i++)
printf("%d ",arr[i]);
}
int main(void){
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
PrintArray(arr, sizeof(arr)/sizeof(int));
return 0;
}
- 2차원 배열 매개변수
void Print2Darray(int arr[][5], int row, int col){ //2차원 배열의 가로 길이 입력
for(int i=0; i<row; i++)
for(int j=0; j<col; j++)
printf("%d ",arr[i][j]);
}
int main(void){
int arr[10] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
int row = sizeof(arr)/sizeof(arr[0]);
int col = sizeof(arr[0])/sizeof(int);
Print2Darray(arr, row, col);
return 0;
}
int arr[][5];는 int (*arr)[5];와 동일
(*arr)[5]: 배열 포인터 형식
-> 가로 길이를 쓰지 않으면 포인터가 가리키는 대상의 크기를 알 수 없으므로 오류 발생!
1. 포인터 배열: 배열의 요소가 포인터 -> 선언방법: char* arr[3];
2. 배열 포인터: 배열을 가리키는 하나의 포인터 -> 선언 방법: char (*arr)[3];
// char (*arr)[3] : 'char 타입의 인덱스를 3개 가지는 배열'을 가리키는 포인터 arr
- 구조체 매개변수 (값에 의한 전달)
struct Person {
char name[20];
int age;
char address[100];
}
void printPerson(struct Person p){
printf("이름: %s\n", p.name);
printf("나이: %d\n", p.age);
printf("주소: %s\n", p.address);
}
int main(void){
struct Person p1;
strcpy(p1.name, "홍길동");
p1.age = 30;
strcpy(p1.address, "서울시");
printPerson(p1);
return 0;
}
- 구조체 포인터 매개변수 (참조에 의한 전달)
struct Person {
char name[20];
int age;
char address[100];
}
void setPerson(struct Person *p){
strcpy(p1->name, "고길동");
p1->age = 40;
strcpy(p1->address, "서울시 서초구");
}
int main(void){
struct Person p1;
strcpy(p1.name, "홍길동");
p1.age = 30;
strcpy(p1.address, "서울시");
printPerson(&p1);
return 0;
}
- 함수 매개변수
int cal(int x, int y, int(*func)(int a, int b){
return func(x, y);
}
int add(int x, int y){
return x+y;
}
int sub(int x, int y){
return x-y;
}
int main(void){
int a=200;
int b=100;
int sum = cal(a, b, add);
int diff = cal(a, b, sub);
printf("%d %d\n", sum, diff); //300 100
return 0;
}
'프로그래밍 언어 > C' 카테고리의 다른 글
지역 변수, 전역 변수, 정적 변수 (0) | 2023.09.23 |
---|---|
문자열, 공백 포함 문자열 입력 (0) | 2023.09.23 |
goto문 (0) | 2023.09.22 |
2차원 배열 동적 할당 (0) | 2023.09.21 |