2011. 3. 3. 15:41
레퍼런스 선언
int val =10;
int &ref = val;


포인터를 이용한 Call-By-Reference 
: 포인터를 이용해서 포인터가 가리키는 메모리 공간에 직접 접근이 가능..
[단점] 포인터는 포인터 연산만 가능하기 때문에 잘못된 메모리 접근을 할 가능성이 높다.

 #include <iostream>

using std::cout;
using std::cin;
using std::endl;

void swap(int *a, int *b)
{
 int temp=*a;
//a++; // error.
 *a=*b;
 *b=temp;
}

int main(void)
{
 int val1=10;
 int val2=20;

 cout<< "val1: "<<val1<< "  ";
 cout<< "val2: "<<val2<<endl;

 swap(&val1, &val2);
 cout<< "val1: "<<val1<< "  ";
 cout<< "val2: "<<val2<<endl;
 return 0;
}




레퍼런스를 이용한 Call-By-Reference
:함수내에서 외부에 존재하는 변수에 직접 접근하는 것을 허용하되, 포인터 연산을 못하게 하는 방법.
 =>레퍼런스 사용
->swap함수 내에서는 a와 b라는 이름으로 main함수 내에 선언된 변수 val1과 val2에 직접 접근이 가능하게 된다.

 #include <iostream>

using std::cout;
using std::cin;
using std::endl;

void swap(int &a, int &b)
{
 int temp=a;
 a=b;
 b=temp;
}

int main(void)
{
 int val1=10;
 int val2=20;

 cout<< "val1: "<<val1<< "  ";
 cout<< "val2: "<<val2<<endl;

 swap(val1, val2);
 cout<< "val1: "<<val1<< "  ";
 cout<< "val2: "<<val2<<endl;
 return 0;
}






'Language > C++' 카테고리의 다른 글

복사생성자가 호출되는 시점  (0) 2011.03.07
깊은 복사(Deep Copy) ..(const Person& p) 명시적 정의  (0) 2011.03.07
객체 포인터 배열  (0) 2011.03.04
생성자와 동적할당  (0) 2011.03.04
new / delete  (0) 2011.03.03
Posted by Triany
2011. 3. 2. 23:10
#define으로 시작하는 전처리기 지시자(Preprocessor Directive)
:단순 치환 작업을 요청할 때 사용되는 지시자
(매크로 선언은 문장의 끝을 의미하는 세미콜론(;)을 붙여주지 않는다)
 #include <stdio.h>
 #define PI 3.1415
이때 PI는 마치 상수처럼 사용되고 있다. 따라서 이러한 PI를 매크로 상수라고 한다.

이런 매크로 상수를 이용하면 배열 선언도 가능하다.
 #include <stdio.h>
 #define NUM 10

 int main(void)
{
    int arr[num]={1,2,3,};

   ......
}


매크로를 이용한 함수의 구현
:함수의 기능을 하는 매크로 => 매크로 함수
 #define SQUARE(x)  x*x
 int a = SQUARE(2);
<매크로 함수의 이점>
1. 매크로 함수는 자료형에 독립적이다.
2. 실행 속도가 향상된다.
3. 함수의 크기가 작아야 함.

<매크로 함수의 단점>
함수의 구현이 까다롭고,
디버깅하기 어려우며,
구현하고자 하는 함수의 크기가 크다면 -> 프로그램의 크기가 커지게 됨.


##을 이용하면 토큰을 결합할 수있다.
#define CONCAT(a, b)  a ## b
Posted by Triany
2011. 3. 1. 23:36
의미1) days 라는 이름의 자료형(열거형)
의미2) 상수의 선언

사용하는 이유: 열거형을 사용함으로써 변수가 지니는 값에 의미를 부여할 수 있게 되고, 이에 따라 프로그램의 가독성이 더불어 높아지기 때문!

예제)

#include <stdio.h>
enum days {MON, TUE, WED, THU, FRI, SAT, SUN};

int main(void)
{
 enum days day;
 printf("Input a day(0:Monday ~ 6:Sunday) : ");
 scanf("%d", &day);

 switch(day)
 {
 case MON :
  printf("수영을 하세요.\n");
  break;
  
 case TUE :
  printf("조깅을 하세요.\n");
  break;
  
 case WED :
  printf("축구를 하세요.\n");
  break;
  
 case THU :
  printf("볼링을 하세요.\n");
  break;
  
 case FRI :
  printf("등산을 하세요.\n");
  break;
  
 case SAT :
  printf("탁구을 하세요.\n");
  break;
  
 case SUN :
  printf("원하는걸 하세요.\n");
  break;
 }
 return 0;
}



'Language > C언어' 카테고리의 다른 글

const키워드 기능  (0) 2011.03.07
매크로와 전처리  (0) 2011.03.02
문자열 처리함수  (0) 2011.03.01
문자단위 입.출력 함수(putchar, getchar, fputs, fgets)...etc  (0) 2011.02.28
배열포인터  (0) 2011.02.27
Posted by Triany