배열의 이름은 int형 포인터다!
따라서 함수의 인자를 int형 포인터로 선언하면 배열을 함수에 전달할 수 있다.
#include <stdio.h>
void ShowArray(int*param, int len)
{
for (int i = 0; i < len; i++) {
printf("%d ", param[i]);
}
printf("\n");
}
int main(void)
{
int arr1[2] = { 1,2, };
int arr2[3] = { 3,4,5 };
ShowArray(arr1, sizeof(arr1) / sizeof(int));
ShowArray(arr2, sizeof(arr2) / sizeof(int));
return 0;
}
출력결과
함수에서 인자로 전달받은 배열의 주소값을 통해, 배열의 값을 직접 수정할수도 있다!
#include <stdio.h>
void ShowArray(int*param, int len)
{
for (int i = 0; i < len; i++) {
printf("%d ", param[i]);
}
printf("\n");
}
void Add(int* param, int len) {
for (int i = 0; i < len; i++) {
param[i]++;
}
}
int main(void)
{
int arr[3] = { 1,2,3 };
ShowArray(arr, sizeof(arr) / sizeof(int));
Add(arr, sizeof(arr) / sizeof(int));
ShowArray(arr, sizeof(arr) / sizeof(int));
return 0;
}
출력결과
int*param 을 int param[] 과 같이 적어도 완벽히 동일한 선언이다!
단, 매개변수의 선언에서만 유효하다.
#include <stdio.h>
void ShowArray(int param[], int len)
{
for (int i = 0; i < len; i++) {
printf("%d ", param[i]);
}
printf("\n");
}
void Add(int param[], int len) {
for (int i = 0; i < len; i++) {
param[i]++;
}
}
int main(void)
{
int arr[3] = { 1,2,3 };
ShowArray(arr, sizeof(arr) / sizeof(int));
Add(arr, sizeof(arr) / sizeof(int));
ShowArray(arr, sizeof(arr) / sizeof(int));
return 0;
}
출력결과도 완전히 같게 나온다.
[추가]
배열의 길이도 인자로 전달하는 이유는,
인자로 전달받은 arr에 sizeof 함수를 사용하게 되면,
배열의 크기를 반환하는게 아니라
포인터변수의 크기를 반환하기 때문에 배열의 크기를 알 수 없다.
그래서 배열의 크기를 미리 계산해서 인자로 넘기는 것이다.
#include <stdio.h>
void ShowArray(int *param)
{
printf("%d ", sizeof(param)/sizeof(int));
}
int main(void)
{
int arr[3] = { 1,2,3 };
ShowArray(arr);
return 0;
}
이런식으로 직접 계산해보면 param의 size는 8byte가 나오는데,
64비트 아키텍처에서는 포인터의 크기는 8byte이고 32비트 아키텍처에서는 4byte 이다.
'언어 > C' 카테고리의 다른 글
[C언어] 간단한 구조체 실습 (0) | 2024.03.29 |
---|---|
[C언어] 배열을 역순으로 정렬하는 함수 (1) | 2024.03.27 |
[C언어] 배열 요소의 최댓값을 찾는 함수 (1) | 2024.03.26 |
[C언어] 비트연산자 (0) | 2024.03.09 |