혼자 공부하는 C언어 | 6주차

C언어의 꽃 포인터 💮
이번 주는 포인터에 대해서 알아보고 문제도 풀어보았습니다.


✅ 포인터 POINTER

메모리의 주소값을 저장하는 변수로, 일반 변수와 마찬가지로 선언 후에 사용
선언하는 방식: int *pi;   double *pdb;   char *pch;

임베디드 프로그래밍을 할 때 메모리에 직접 접근하는 경우나 동적 할당한 메모리를 사용하는 경우 반드시 필요

cmd

🚩 연산자

구분사용 예기능
주소 연산자 &int a;
&a;
변수 앞에 붙여 사용하며, 변수가 할당된 메모리의 시작 주소 값을 구한다.
포인터 *char *pc;
int *pi;
double *pd;
시작 주소 값을 저장하는 변수며, 가리키는 자료형을 표시해 선언한다.
간접 참조 연산자 **pi = 10;포인터에 사용하며, 포인터가 가리키는 변수를 사용한다.

💡 주소 연산자 &와 scanf 함수의 &는 다르므로 혼동 주의
💡 컴파일러마다 포인터 선언 방식이 다르다고 해서 Visual Studio를 사용해서 선언을 해보았는데,
        책에 나와있는 것과 달리 *의 위치가 타입 바로 옆에 붙어있었습니다.

1
2
3
4
5
int* pi; // C++에서 많이 사용

int *pi; // C언어에서 많이 사용되는 전통적인 스타일

int * pi;

알고 보니, 컴파일러마다 선언 방식이 다른 것이 아니라
C언어 문법은 공백에 대해 유연하게 설계되어 있어서 세 가지 표기법을 모두 같은 의미로 해석한다고 합니다. By Gemini

✅ 도전 실전 예제 - 미니 정렬 프로그램

키보드로 실수 3개를 입력한 후, 큰 숫자부터 작은 숫자로 정렬한 뒤 출력하는 프로그램을 작성합니다.
다음 코드와 출력 결과를 참고해 line_up 함수를 작성하세요.
line_up 함수에는 이미 정의된 swap 함수를 호출해 구현하세요.

cmd
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

#include <studio.h>

void swap(double *pa, double *pb);
void line_up(double *maxp, double *midp, double *minp);

int main(void)
{

    double max, mid, min;
    
    printf("실수값 3개 입력 : ");
    scanf("%lf%lf%lf", &max, &mid, &min);
    line_up(&max, &mid, &min);
    printf("정렬된 값 출력 : %.1lf, %.1lf, %.1lf\n", max, mid, min);
    
    return 0;

}

void swap(double *pa, double *pb)
{

    double temp;
    
    temp = *pa;
    *pa = *pb;
    *pb = temp;
    
}
    
# 여기에 line_up 함수 구현 #

void line_up(double *maxp, double *midp, double *minp)
{

    if (*maxp < *midp)
    {
        swap(maxp, midp);
    }
    
    if (*maxp < *minp)
    {
        swap(maxp, minp);
    }
    
    if (*midp < *minp)
    {
        swap(midp, minp);
    }
    
}

✅ 혼공학습단 회고

C언어를 알고 있다고 하면 약간 전공자처럼 보이고 멋지다는 생각을 오래전부터 해왔던 저는…
항상 C언어에 대한 배움의 욕구가 있었는데 이번에 사심을 가득 채울 수 있어서 좋았습니다.
방학 전까지는 따로 하는 일이 없어서 아주 열심히 블로그 작성했는데 날이 갈수록 점점 분량이 줄어들기 시작하더니
지각으로 마무리를 하네요… 할 말이 없습니다
그래도 끝낼 수 있어서 다행이고 기다려주신 족장님 감사합니다 🙇‍♀️
혼공C 하시는 분들이 많이 없어서 조금 쓸쓸했지만 혼자서 꿋꿋이 하고 계시는 분도 있길래 대단하다고 생각했습니다..
반면에 혼공머신은 너무 많아서 책도 있겠다 나도 해야하나…? 라는 생각이 조금 들었습니다 흐흐
C언어를 한 번 배우고 나니 이제 어떤 언어가 와도 습득할 수 있겠다 라는 자신감이 뿜뿜하는 그런 활동이었네요

cmd

이번에 배운 내용으로 끝이 아니라 이 지식을 가지고 정보처리기사도 합격하고
이 기세로 C++까지 학습할 수 있는 제가 되었으면 좋겠습니다…. (제발) (화이팅)
다음에도 또 배우고 싶은 내용이 생기면 돌아오도록 하겠습니다 👍

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus