알고리즘 study -9-

한창희·2021년 7월 1일
0

algorithm study

목록 보기
9/26

<call by value(값에 의한 호출)>

-> 함수를 호출할 경우, 변수의 값을 복사해서 넘김

  • 값을 넘기는 장점과 단점
    장점 : 서로 관여하지 않는 완벽한 작업을 할 수 있다
    단점 : 서로 관여하지 않기 때문에 불편한 경우가 꽤 많다


<포인터 넘기기>

-> 값을 넘기는 대신, 값을 가지고 있는 변수의 주소를 넘긴다

#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;
}

하지만 주소를 넘기는 것은 그다지 좋은 습관이 아니라 생각한다
-> 함수의 철학을 벗어나는 듯 = 완벽한 분업을 벗어남


<값을 넘기는 것 vs 배열을 넘기는 것>

값 : 값을 복사하여 함수에게 넘기므로 서로 영향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 이 경우 배열의 길이 정보 를 알 수 없기에 함수 호출 시 같이 넘겨주어야 된다


profile
매 순간 최선을 다하자

0개의 댓글

관련 채용 정보