-> 함수를 호출할 경우, 변수의 값을 복사해서 넘김
값을 넘기는 장점과 단점
장점 : 서로 관여하지 않는 완벽한 작업을 할 수 있다
단점 : 서로 관여하지 않기 때문에 불편한 경우가 꽤 많다
-> 값을 넘기는 대신, 값을 가지고 있는 변수의 주소를 넘긴다
#include <stdio.h>
void swap(int* a, int* b){
int temp;
temp = *a;
*a = *b; // a가 가리키는 값이 b가 가리키는 값으로 변경
*b = temp;
}
int main() {
int a, b;
a = 3;
b = 8;
swap(&a, &b);
printf("a: %d b: %d\n", a, b);
return 0;
}
하지만 주소를 넘기는 것은 그다지 좋은 습관이 아니라 생각한다
-> 함수의 철학을 벗어나는 듯 = 완벽한 분업을 벗어남
값 : 값을 복사하여 함수에게 넘기므로 서로 영향x
배열 : 포인터를 넘기므로 서로 영향을 줄 수 있다
#include <stdio.h>
void intialize(int arr[10]){
for(int i = 0; i<10; i++){
arr[i] = 0;
}
}
int main() {
int a[10];
for(int i = 0; i<10; i++){
a[i] = i;
}
intialize(a); // 그냥 a는 배열의 0번째를 가리키는 주소
for(int i = 0; i<10; i++){
printf("%d ", a[i]);
}
return 0;
}
0으로 초기화 된 값이 나올 것이다
void intialize(int* arr, int count){
for(int i = 0; i<count; i++){
arr[i] = 0;
}
}
배열의 크기를 모를 수 있으므로 위와 같이 int* arr의 형태로 코드를 실행시켜도 동일한 결과가 나온다
but 이 경우 배열의 길이 정보 를 알 수 없기에 함수 호출 시 같이 넘겨주어야 된다