c언어 정리

[문제1] 키워드 const의 의미

키워드 const는 어떠한 의미를 갖는가? 다음 문장들을 대상으로 이를 설명해보자.

  • const int num=10;

-> 변수 num을 상수화

  • const int * ptr1=&val1;

-> 포인터 ptr1을 이용해서 val1의 값을 변경할 수 없음

  • int * const ptr2=&val2;

-> 포인터 ptr2가 상수화 됨

  • const int * const ptr3=&val3;

-> 포인터 ptr3가 상수화 되었으며, ptr3를 이용해서 val3의 값을 변경할 수 없음

 

[문제2] 실행중인 프로그램의 메모리 공간

실행중인 프로그램은 운영체제로부터 메모리 공간을 할당 받는데, 이는 크게 데이터, 스택, 힙 영역으로 나뉜다. 각각의 영역에는 어떠한 형태의 변수가 할당되는지 설명해보자. 특히  C언어의 malloc과  free 함수와 관련해서도 설명해보자.

 

  • 데이터 : 전역변수가 저장되는 영역
  • 스택    : 지역변수 및 매개변수가 저장되는 영역
  • 힙       : malloc 함수 호출에 의해 프로그램이 실행되는 과정에서 동적으로 할당이 이뤄지는 영역
  • malloc & free : malloc 함수호출에 의해 할당된 메모리 공간을 free 함수호출을 통해서 소멸하지 않으면                                  해제되지 않는다. 

[문제3] Call-by-value vs Call-by-reference

함수의 호출형태는 크게 '값에 의한 호출(Call-by-value)'과 '참조에 의한 호출(Call-by-reference)'로 나뉜다. 이둘을 나누는 기준이 무엇인지, 두 int형 변수의 값을 교환하는 Swap 함수를 예로 들어가면서 설명해보자.

 

1. Call-by-value

void SwapByValue(int num1, int num2)

{

     int temp=num1;

     num1=num2;

     num2=temp;

     //Call-by-value

}

 

int *SimpleFunc(int *ptr)

     return ptr+1;  

}

값을 인자로 전달하는 함수의 호출방식

 

2. Call-by-reference

void SwapByRef(int *ptr1, int *ptr2)

{

     int temp=*ptr1;

     *ptr1=*ptr2

     *ptr2=temp;

     //Call-by-reference

}

 

int *simpleFunc(int *ptr)

{

     if(ptr==NULL)

          return NULL;

     *ptr=20;

     return ptr;

}

주소 값을 인자로 전달하는 함수의 호출방식

주소 값이 전달되어 참조의 도구로 사용되는 방식

 

- C 언어에서 Static

  • 전역 변수에 선언된 static의 의미 

->선언된 파일 내에서만 참조를 허용하겠다는 의미

 

  • 함수 내에 선언된  static 의 의미

->한번만 초기화되고, 지역변수와 달리 함수를 빠져나가도 소멸되지 않는다.

 

 

[참조] 윤성우의 열혈 C++ 프로그래밍

'EMBEDDED > 지식저장소' 카테고리의 다른 글

I2C 통신  (0) 2019.04.22
LIN 통신  (0) 2019.04.19

댓글

Designed by JB FACTORY