Function(함수)
1.
함수를 쓰는 이유는 반복되는 코드의 사용을 줄이기 위해서이다.
2. 사용자 정의 연산
ex) Power(2, 3);
3. 추상화, 모듈화
---
함수 인자 전달
int a = 100;
int b = 200;
int tmp = a;
a = b;
b = tmp;
=>
void swap(int* pa, int* pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
---
c언어에는 call by reference가 없다. call by value밖에 없다.
---
배열을 인자로 전달할 때
첫번째 요소의 주소와 size를 전달한다.
int nums[] = {1, 2, 3, 4, 5};
int sum;
sum = sumArray(nums); == sumArray(&nums[0]);
int sumArray(const int* pArr) { => const 쓸지 안쓸지 고민하고 쓸 수 있으면 써줘라.
int sum = 0;
for(i = 0; i < 5; ++i) { // 크기가 5인 배열밖에 계산하지 못한다.
sum = sum + pArr[i];
}
return sum;
}
int nums[] = {1, 2, 3, 4, 5};
int sum;
sum = sumArray(nums, 5); == sumArray(&nums[0]);
int sumArray(const int* pArr, int size) { => const 쓸지 안쓸지 고민
int sum = 0;
for(i = 0; i < size; ++i) { // 인자로 size를 받아 다양한 크기의 배열을 계산할 수 있다.
sum = sum + pArr[i];
}
return sum;
}
---
int nums[] = {1, 2, 3, 4, 5};
int sum;
sum = sumArray(nums);
int sumArray(int arr[]) { => int sumArray(int* arr)
int sum;
for(int i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i) {
sum += arr[i];
}
}
int nums[] = {1, 2, 3, 4, 5};
int sum;
sum = sumArray(nums, sizeof(nums)/sizeof(nums[0])); // 크기에 그냥 5 써줘라
int sumArray(int arr[], int size) { => int sumArray(int* arr)
int sum;
for(int i = 0; i < size; ++i) {
sum += arr[i];
}
}
---
int matrix[][4] = {
{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}
};
re = sumMatrix(matrix, 3, 4); => sumMatrix(&matrix[0], 3, 4);
int sumMatrix(const int (*m)[4], int row, int col) {
int sum = 0;
for(int i = 0; i < row; ++i)
for(int j = 0; j < col; ++j)
sum += m[i][j];
return sum;
}
---
구조체(structure) 자료를 입력으로 전달할 때 오버헤드를 줄이기 위해서 포인터를 쓴다.
typedef struct {
int year;
int month;
int day;
} Date;
Date today;
today.year = 2019;
today.month = 7;
today.day = 17;
Date d;
d = today;
---
printDate(today);
void printDate(Date d)
{
printf("%d %d %d\n", d.year, d.month, d.day);
}
printDate(&today); // 오버헤드를 줄여주기 위해서 주소값을 넘겨준다.
void printDate(const Date* pd)
{
printf("%d %d %d\n", (*pd).year, (*pd).month, (*pd).day);
==
printf("%d %d %d\n", pd->year, pd->month, pd->day);
}
---
사용자 정의 연산(= 함수)를 인자로 전달할 때 함수 포인터를 쓴다.
---
임의의 인자를 전달할 때 void*를 쓴다.
---
Comments
Post a Comment