우선! 인자 전달의 기본 방식은 값.복.사!
배열을 통째로 넘기는 것은 불가능! ===> 함수 내에서 배열에 접근할 수 있도록 배열의 주.소.값. 전.달!
일단 인자 하나 있는 버전 포인터로 사용하는 방법 보여주겠음!
[인자 1개]
// 문제 14-1, 문제 1
#include <stdio.h>
int SquareByValue(int num)
{
num *= num;
return num;
}
void SquareByReference(int *num)
{
*num *= *num;
}
int main()
{
int num = 4;
SquareByValue(num);
printf("1. %d\n", num);
SquareByReference(&num);
printf("2. %d\n", num);
return 0;
}

이거는 값복사임!! num이라는 변수의 값 4를 복사해서 가져간거임!!
그래서 그 다음 num을 출력했을때, 값이 4 그대로임!!!
SquareByReference함수는 int형의 주소값을 하나 받아서 그 주소가 가리키는 값의 제곱을 다시 그 주소가 가리키는 값에 넣어줌.
그 주소가 가리키는 값 = *(변수)
그래서 이 함수를 실행한 다음 num을 출력해보면 16으로 값이 바뀐걸 볼 수 있음!! 이건 주소참조이기 때문!!!!!!!
[1차 배열]
#include <stdio.h>
void ShowArraryElem(int *param, int len) // param의 주소와 길이를 입력
{
for (int i = 0 ; i < len ; i++)
{
printf("%d ", param[i]); // param의 주소를 아니까 각 요소값을 인덱싱으로 불러올 수 있음.
}
printf("\n");
}
int main()
{
int arr1[3] = {1, 2, 3};
ShowArraryElem(arr1, sizeof(arr1)/sizeof(arr1[0]));
return 0;
}
ShowArraryElem 함수는 int형 주소값 하나와 int형 변수 하나를 받아서 배열의 요소를 출력해주는 함수임.
1차 배열인 arr1은 배열이름 자체만 사용하면 배열이 처음 시작하는 주소가 됨.
그래서 함수를 호출할 때, arr1을 그대로 써주면 됨!! (파란색 부분)
ShowArraryElem(arr1, sizeof(arr1)/sizeof(arr1[0]));
그리고 함수 내에서는 인자로 전달된 배열의 길이를 계산할 수 없다고 함!!!!!
그래서 반복문을 돌리고 싶다면, 배열의 길이를 전달인자로 넣어줘야함!!!!
[2차 배열]
#include <stdio.h>
#define SIZE 100
void show_kimbab(char (*list1)[SIZE], int len_list)
{
for (int i = 0 ; i < len_list ; i++)
{
printf("%s ", list1[i]);
}
}
int main()
{
char kimbab_list[8][SIZE] = {"김밥", "치즈김밥", "참치김밥", "김치김밥", "야채김밥", "소고기김밥", "돈까스김밥", "삼겹살김밥"};
int len_kimbab = sizeof(kimbab_list)/sizeof(kimbab_list[0]);
show_kimbab(kimbab_list, len_kimbab);
return 0;
}

2차 배열은 문자열로 보여주겠음!!
show_kimbab 이라는 함수는 char형의 2차 배열의 주소와, 길이 변수를 받아서 2차 배열을 출력해주는 함수임.
지금하고 있는 개인프로젝트의 김밥리스트로 예를 들어봤음.
배열의 이름 자체는 주소이기 때문에, 함수를 호출할 때 배열 이름만 적어주면 됨. (kimbab_list)
함수를 호출하면 김밥 리스트의 주소가 전달되고, 주소에 인덱싱을 하여 요소 하나하나에 접근하여 모든 요소를 출력할 수 있음!!!
다덜 이해가 되셨나요오오오오오오오옹ㅇ오오오옹
우리 포인터 박사가 되어보자요!!!!!!
'C > 본수업' 카테고리의 다른 글
[2025.04.01] 이중 포인터 (0) | 2025.04.02 |
---|---|
[2025.03.28] 1차 배열과 포인터 (0) | 2025.03.28 |
[2025.03.14] Ch.09_함수_자판기 만들기 함수화 (동영상 포함) (0) | 2025.03.14 |
[2025.03.14] Ch.08_문자 입출력과 입력 유효성 검사 (0) | 2025.03.14 |
[2025.03.13] Ch.07_C의 제어몬: 분기와 점프_자판기 만들기 (0) | 2025.03.13 |