728x90
728x90
c언어 복습 유도 확인학습 문제

 

 

문제 1 : const 키워드의 의미

다음 문장들을 대상으로 키워드 const가 갖는 의미를 설명한다.

const int num=10;
const int * ptr1=&val1;
int * const ptr2=&val2;
const int * const ptr3=&val3;

 

const는 변수를 상수화하기 위해 사용

const란 변수를 상수화하기 위해 쓴다.
상수는 반드시 선언과 동시에 값을 할당하여 초기화한다.
초기화 안하면 컴파일 에러 발생

const int n = 10; // n=12 x

 

데이터상수화, 상수포인터

n이라는 포인터가 아니라, 포인터가 가리키는 대상을 상수화한다.
n이라는
포인터를 이용해서 데이터를 변경하는 것을 막겠다.
(포인터 외에 변수를 변경하는 것은 막지 못함)
메모리공간은 그대로이다.

const int* n = 12;
// *n = 20 (x)
//  a = 20 (0)

 

포인터상수화
int* const n = 12;   
// n = &a (x)

 

 

데이터상수화 + 포인터상수화 
const int* const n;   // 데이터상수화, 포인터상수화 둘 다 불가

 

 

 

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

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

 

void function(int);

int main(void)
{
	int size;
	cin>>size;
	function(size);
	return 0;
}

void function(int i)
{
	int array[i];
	// stack에 올려야되는데 올리지 못한다
	// 그래서 heap에 선언하기 위해 
	// malloc과 free 함수를 사용한다.
}

 

OS는 메모리공간의 효율적 관리를 위해 나눠서 메모리공간을 할당한다.

데이터영역?

전역변수, 스태틱변수가 들어간다.
전역/static 변수가 초기화 되는 시점만 다르고 생성되는 시점은 같다.
전역 변수 : 프로그램이 실행되자마자 할당되어 프로그램 종료 시까지 남아있다.
static 변수 : 프로그램 시작과 동시에 메모리공간에 할당되나, 호출 시 변수 초기화가 된다.

stack의 용도 및 특징?

컴파일 타임에 메모리의 크기가 결정될 수 있는 것들을 저장하기 위한 메모리 공간

heap의 용도 및 특징?

런타임에 메모리의 크기가 결정되는 변수나 배열과 같은 것들을 저장하기 위한 메모리 공간
프로그래머가 관리 (할당, 해지)

malloc & free 함수의 필요성?

malloc은 heap에 메모리공간을 할당 / free 함수 호출로 반드시 할당된 걸 해지 (미호출 시 미해제)
사용할 줄도 알아야 한다.

// C

#include <stdlib.h> //malloc 함수가 포함된 헤더 파일

void* malloc(size_t size)
// size_t : 동적으로 할당할 메모리의 크기
// 반환값 : 성공 시 할당 메모리의 첫번재 주소, 실패 시 null
#include <stdio.h>
#include <stdlib.h>

void main()
{
    int* arr;
    arr = (int*)malloc(sizeof(int) * 4); // size 4 동적할당

    arr[0] = 100;
    arr[1] = 200;
    arr[2] = 300;
    arr[3] = 400;

    for (int i = 0; i < 4; i++) {
        printf("arr[%d] : %d\n", i, arr[i]);
    }

    free(arr); //동적할당 해제
}

 

 

문제 3 : Call-by-value vs. Call-by-reference

함수의 호출형태는 크게 값에 의한 호출과 참조에 의한 호출로 나뉜다. 이 둘을 나누는 기준이 무엇인지, 두 int형 변수의 값을 교환하는 Swap 함수를 예로 들어가며 설명한다.

call by value 함수 : 값에 의한 호출, 함수가 매개변수를 값으로 전달받음
call by reference 함수 : 함수의 매개변수를 참조변수로 선언하는 방식.

참조변수 기능이 추가되면서 C언어에는 없던 C++에서 추가된 개념.

 

// Call-by-value
void SwapByValue(int num1, int num2)
{
	int temp = num1;
	num1=num2;
	num2=temp;
}

// Call-by-reference
void SwapByRef(int * ptr1, int * ptr2)
{
	int temp = *ptr1;
	*ptr1=*ptr2;
	*ptr2=temp;
}
#include <iostream>

void plus(int &a) { // 참조 매개변수
	a++;
}

int main() {
	int a = 10;
	plus(a); // Call by Value 처럼 사용
	std::cout<<a<<std::endl;

	return 0;
}
728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v