변수는 값(자료형에 맞는)을 저장하고, 포인터 변수는 주소를 저장하는 변수이다. 

 포인터 변수는 주소를 저장하기 때문에 상수값을 저장할 수 없고 NULL이나 다른 변수의 주소를 저장해야 한다. 상수값을 저장할 수 없는 이유는 해당하는 상수번지에 어떤 데이터가 있는지 알 수 없고, 해당 데이터를 다른 중요한 프로그램이 사용한다면 수정해서는 안되기 때문이다.

 포인터 변수를 선언하는 방법은 다음과 같고 변수의 주소는 &를 통해 알 수 있다.

	자료형 *변수명;
	자료형 *변수명 = 초기값;
1
2
3
4
int *pt1;                    //포인터 수 
int *pt2 = NULL;    //포인터 변수 선언 및 NULL로 초기화
int num = 10;    
int *pt3 = #    //포인터 변수 선언 및 다른 변수의 주소를 저장
cs

 4번째 줄에 int *pt3 = &num3;를 그림으로 표현하면 아래와 같이 표현할 수 있다. 주소는 매 실행마다 달라지므로 예로 pt3의 주소를 200번지, num의 주소를 100번지로 나타냈으며 pt3는 num의 주소인 100번지를 저장하고 있다.

포인터 변수와 일반변수의 연결

 포인터 변수는 저장된 주소에 있는 변수의 값을 포인터 연산자(*)를 통해 가져오거나 수정할 수 있다. 다음 코드는 pt3를 통해 num의 값을 가져오고 수정하는 예제 및 출력 결과이다.

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void) {
    int num = 10;
    int *pt3 = &num;
    //포인터 연산자(*)를 통해 num의 값을 가져옴
    printf("*pt3 = %d\n"*pt3);
    //포인터 연산자(*)를 통해 num의 값을 수정
    *pt3 = 20;
    printf("num = %d\n", num);
    return 0;
}
cs
	*pt3 = 10
	num = 20

 

 

 Visual Studio는 버전별로 콘솔 프로젝트 생성에 약간씩 차이가 있습니다. 이번 시간에는 현재 최신 버전인 2019 버전 설치 및 콘솔 프로젝트 생성 방법에 대해 알아보겠습니다. 

 우선 공식 홈페이지에서 설치 파일을 다운로드합니다. 무료 버전인 Community 2019를 선택하시면 됩니다.

 설치 파일을 실행하면 다음 화면이 나오는데 계속을 누르면 설치 준비가 진행됩니다.

 완료가 되면 설치할 요소들을 선택하는 창이 나오는데 컴퓨터 용량이 넉넉하고 귀찮으시면 전체를 체크하고 설치하면 됩니다. 전체 설치가 싫다면 C/C++ 학습을 위한 최소 설치 항목인 C++를 사용한 데스트콥 개발을 체크하고 설치를 눌러 진행하면 됩니다.

 설치 진행이 완료되면 컴퓨터를 재시작해야합니다.

 재시작 후 Visual Studio 2019를 실행하면 로그인 화면이 나오는데 (캡처를 못했습니다.) Microsoft 회원이 아니라면 가입하셔서 로그인해주는 것이 좋습니다. 어차피 일정 기간 후에는 Visual Studio를 사용하려면 로그인해야 되기 때문입니다.

 로그인 후 테마 선택하는 화면이 나오는데 개인 취향에 맞는 테마를 선택하면 됩니다.  

 드디어 VisualStudio 2019 첫 화면입니다.

 여기까지가 설치 과정이 입니다.

 이제부터 콘솔 프로젝트 생성 과정을 진행하겠습니다. Visual Studio 2017과 약간 다릅니다. 우선 위 첫 화면에서 새 프로젝트 만들기를 선택합니다.

 그리고 콘솔 앱을 선택 후 프로젝트 이름과 위치, 솔루션 이름을 확인하고 만들기를 클릭합니다.

 솔루션과 프로젝트 및 기본 cpp파일이 생성이 됩니다. Visual Studio 2019에는 기본 코드에 주석으로 실행하는 방법이 있어서 실행하는 방법을 잊었다면 참고하면 됩니다. Ctrl + F5를 눌러 실행시킨 결과 화면입니다.

 여기까지 Visual Studio 2019 설치 및 콘솔 프로젝트 생성하는 방법이었습니다. 수고하셨습니다.

 별을 이용하여 삼각형을 출력하는 예제는 이중 반복문을 이용한 대표적인 예제 중 하나이다. 같은 문제도 다양한 방법으로 해결할 수 있기 때문에 처음 프로그램 언어를 배우는 학생들이 어려워하는 예제이기도 하다. 그래서 다양한 별 삼각형 예제를 동일하게 해결하는 방법을 소개하려 한다.

 우선 별 삼각형를 하기전 간단한 예제를 살펴보자. 아래 예제는 5행 3열의 별을 출력하는 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(void) {
    int i,j;
    int row = 5, col = 5;
    for(i=1; i<=row; i++){
        for(j=1; j<=col; j++){
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
cs
 

 이 예제에서 기억해야할 내용은 7줄에서 별(*)을 col개 출력하기 위해 j를 1부터(j=1) col보다 작거나 같다(j<=col)로 표현했다는 사실이다. 즉, 우리가 별을 n개 출력하고 싶다면 for(j=1; j<=col; j++) 에 col 대신 n을 대입하면 된다. 우리는 이 방법을 이용하여 별 삼각형 예제를 풀 것이다. 앞으로 설명할 방법은 다음과 같은 장단점이 있다.

 장점 

  •  별의 개수 또는 공백의 개수를 안다면 쉽게  해결 할 수 있다.
  •  별 삼각형의 다양한 예제를 같은 방법으로 해결 할 수 있다.

 단점

  •  별의 개수를 수식화 하는데 어려움이 있다.

 별 예제 첫 번째 예제를 살펴보자. i는 행의 번호를 의미한다.

*		i=1, *의 개수=1
**		i=2, *의 개수=2
***		i=3, *의 개수=3
****		i=4, *의 개수=4
*****		i=5, *의 개수=5
		     *의 개수=i

 이 예제에서 행이 1부터 시작할 때 *의 개수는 행의 번호와 같다. 따라서 *의 개수는 i개로 표현할 수 있고 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(void) {
    int i, j;
    int row = 5;
    for (i = 1; i <= row; i++) {
        for (j = 1; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
cs

 별 예제 첫 번째 예제를 살펴보자. 

    *	i=1, 공백의 개수=4, *의 개수=1
   **	i=2, 공백의 개수=3, *의 개수=2
  ***	i=3, 공백의 개수=2, *의 개수=3
 ****	i=4, 공백의 개수=1, *의 개수=4
*****	i=5, 공백의 개수=0, *의 개수=5
	     공백의 개수=5-i, *의 개수=i
	               =row-i

 공백의 개수와 행의 합이 row와 같다.(공백의 개수 + 행 = row) 따라서 공백의 개수는 row에서 행의 뺀 값이다.(공백의 개수 = row - 행) *의 개수는 첫번째 예제와 같은 i개이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(void) {
    int i, j;
    int row = 5;
    for (i = 1; i <= row; i++) {
        for (j = 1; j <= row - i; j++) {
            printf(" ");
        }
        for (j = 1; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
 
cs

 

+ Recent posts