Ⅰ. Call-by-value

 

- 함수를 호출 할 때 단순히 값을 전달하는 형태의 함수호출


< 예제 >


#include <stdio.h>

void change(int n1, int n2){

    int temp= n1;

    n1=n2;

    n2=temp;

    printf("(After) Number 1 : %d, Number 2 : %d \n",n1,n2);

}

int main(void){

    int num1=10;

    int num2=20;

    printf("(Before) Number 1 : %d, Number 2 : %d \n",num1,num2);

    change(num1,num2);

    //printf("Number 1 : %d, Number 2 : %d \n",num1,num2);

    -> 사용시 num1과 num2가 바뀌지 않는다 (위에 함수를 int형으로 바꾼뒤 return n1,n2;)

    return 0;

 

}


< 출력결과 >


(Before) Number 1 : 10, Number 2 : 20 

 

(After) Number 1 : 20, Number 2 : 10



 

Ⅱ.Call-by-reference 


- 모리의 접근에 사용되는 주소 값을 전달하는 형태의 함수 호출 


< 예문 > 


#include <stdio.h>

void change(int *ptr1, int *ptr2){

    int temp = *ptr1;;

    *ptr1 = *ptr2;

    *ptr2 = temp;

}

int main(void){

    int num1=10;

    int num2=20;

    printf("Number 1 : %d, Number 2 : %d \n",num1,num2);

    change(&num1,&num2);

    printf("Number 1 : %d, Number 2 : %d \n",num1,num2);

    return 0;

 

}


< 출력 결과 >


Number 1 : 10, Number 2 : 20 

 

Number 1 : 20, Number 2 : 10 






sourced by "윤성우 열혈 C 프로그래밍 강의" 



'Programming > C' 카테고리의 다른 글

구조체 ( Struct )  (0) 2015.08.27
Stack과 Queue  (0) 2015.08.26
2차원 배열  (0) 2015.08.26
동적 할당  (0) 2015.08.26
[ Project ] Pascal  (0) 2015.08.26
2차원 배열 Programming/C 2015. 8. 26. 22:51

2차원 배열 

- 2차원 배열은 1차원 배열과는 다르게 첨자 2 개를 사용하는 배열이다. 같은 데이터형의 변수가 

  행( row )과 열( column )을 나타내는 데 , 첫 번째 첨자는 행을, 두 번째 첨자는 열을 나타낸다.




 Ⅰ. 행과 열

    

 1차원 배열에서는 변수이름 [ 열 ]로 표현했지만 , 2차원 배열에선 변수 이름 [행] [열] 로 표현한다. 옆에 그림과 같이 표현한다.       



Ⅱ.  2차원 배열의 크기


변수이름 [i:n][j:m] 의 크기는 i와 j 가 첫 번째 요소의 행과 열의 첨자이고, n과 m은 마지막 요소의 행과 열의 첨자이다. 

따라서, 배열의 크기를 구하는 공식은 ( n-i+1) x ( m-j+1) 이다.

 

 (ex) 위의 그림 처럼 첫 번째 요소의 행과 열은 [0][0]이므로 i 와 j 는 0이고, 마지막 요소의 행과 열은 [2][1]이므로 n은 2, 

        m은 1이다. 따라서 위의 그림의 배열의 크기는 (2-0+1) x (1-0+1) 으므로 3x2는 6이되어, 

        위 그림의 2차원 배열의 크기는 6이다.



Ⅲ. 2차원 배열의 저장 방식 


2배원 배열에는 행 중심 저장 방식과 열 중심 저장 방식이 있다. 행 중심 저장 방식은 1번째 행,

2번째 행 .. 순으로 저장하고 열 중심 저장 방식은 마찬가지로 1번째 열, 2번째 열.. 식으로 저장 한다.


[그림 7-7] 2차원 배열 요소의 주소

 

☞ 2차원 배열 arr[n][m]에서 첫 번째 요소의 행과 열의 첨자가 a이고 시작주소가 base, 요소의 크기가 size라고 할 때 ,

    arr[i][j]의 주소를 구하는 공식은 다음 과 같다


① 행 중심 저장 방식 

   arr[i][j] 의 주소 = base + (m x (j-a)) x size


② 열 중심 저장 방식 

   arr[i][j] 의 주소 = base + (n x (j-a)) x size


(ex) 위의 사진을 예로 들면 시작 주소는 200이고 각 요소의 크기는 4이니.. ▼


① 행 중심 저장 방식의 arr[2][0]

   200 + (2 x (2-0) + (0-0)) x 4 = 216


② 열 중심 저장 방식의 arr[2][0]

   200 + (3 x (0-0) + (2-0)) x 4 = 208


두 결과 모두 원하는 결과를 출력하고 있다.




                                                                                   sourced by "NAVER"

'Programming > C' 카테고리의 다른 글

Stack과 Queue  (0) 2015.08.26
Call-by-value 와 Call-by-reference  (0) 2015.08.26
동적 할당  (0) 2015.08.26
[ Project ] Pascal  (0) 2015.08.26
포인터 ( Pointer )  (0) 2015.06.14
동적 할당 Programming/C 2015. 8. 26. 12:51
동적 할당

- 컴파일을 실행하기 전에 메모리의 크기가 정해져 할당되어 있는 정적 할당과 달리 프로그램 실행 중에 
  메모리의 크기를  임의로 정할 수 있는 할당을 동적 할당이라 한다.
 
   ☞ 동적 할당을 쓰는 이유는 정적 함수를 쓸데보다 좀 더 효율 적으로 메모리를 활용 하기 위해서이다.

Ex) 1 ~ 100을 입력하는 배열에서는 크기를 100으로 줘야 하는데 그럼 20을 입력하면 80이 쓸데없게 된다. 
    이러한 메모리를 효율적으로 사용하기 위해 동적 할당을 사용한다.


I. 동적 할당에서 사용하는 함수
 
※아래의 함수를 사용하기 위해선 헤더파일에 #include <stdlib>를 선언해 주어야 한다. ( standard library의 약자 )

1. malloc 함수

- Memory Allocation의 약어로 "메모리 할당" 이라는 뜻이다. 메모리의 크기를 설정 하기 위해 사용 한다.

형식 : 포인터 변수명 = (자료형 *) malloc ( sizeof( 자료형 ))

2. calloc 함수 

- Clear Allocation의 약어로 "깔끔한 할당" 이라는 뜻이다. 메모리의 크기를 초기화 한 뒤 메모리의 
  크기를 설정 할 수 있다.

형식 : 포인터 변수명 = (자료형 *) calloc ( 메모리에 곱할 수, sizeof( 자료형 ))
 
Ex) num = (int *) calloc (5, sizeof(int))의 메모리의 크기는 5x(int의 자료형의 크기 4) 이니 20 이다.

3. realloc 함수

- Re Allocation의 약자로 "재할당"이라는 뜻이다. 동적 메모리 할당을 해제하지 않고 다시 설정하여 
  이어서 사용이 가능하다.

형식 : 포인터 변수명 = (자료형 *) realloc  ( 재설정할 변수 명 , sizeof( 자료형 ))


II. 동적 할당을 끝낼 땐..

- 동적 할당을 끝내고 싶을 땐 free (포인터 변수)를 입력하면 된다.



'Programming > C' 카테고리의 다른 글

Stack과 Queue  (0) 2015.08.26
Call-by-value 와 Call-by-reference  (0) 2015.08.26
2차원 배열  (0) 2015.08.26
[ Project ] Pascal  (0) 2015.08.26
포인터 ( Pointer )  (0) 2015.06.14