25.06.16 학습개발일지 / C언어 문법, 06. 간단한 프로그램 만들기 1

2025. 7. 24. 19:58·LMS 7/개발일지

 

1. C언어 문법(혼공C) / 포인터

1) 기본개념

(1) 메모리 주소

int a;
 

int형 변수 a를 선언하게 되면, 메모리 중 4바이트를 사용하게 된다.

예를 들어 메모리의 100번지부터 할당이 되었다고 가정했을 때

int형 변수 a는 100부터 103까지의 공간을 사용하여 a라는 이름으로 사용하게 된다.

따라서 지금까지 변수명으로 메모리 공간과 값을 사용할 수 있었던 것 !

 

(2) 주소 연산자 : &(앰퍼센드)

주소 연산자는 변수 앞에 붙여쓰고, 변수가 들어있는 메모리의 주소 값 자체가 됨.

int a;
double b;
char c;
 

를 각각 살펴보면

int형 변수 a는 메모리의 92번지부터 95번지까지 4byte에

double형 변수 b는 76번지부터 83번지까지 8byte에

char형 변수 c는 67번지 1byte에 할당됨.

 

 

이를 출력해보기 위해서는, 변수 앞에 &를 붙여 사용해야 함

&a(주소연산자 / 변수명)
 
printf("a의 주소 : %p\n", &a);
printf("b의 주소 : %p\n", &b);
printf("c의 주소 : %p\n", &c);
 

(3) 포인터 / 간접 참조 연산자(포인터 연산자) : *(애스터리스크)

포인터를 선언하기 위해서는 변수 앞에 *을 붙여야 하고

저장할 주소의 형태도 선언해주어야 함

아래처럼 포인터 변수가 선언되면 새롭게 메모리에 저장 공간을 사용하여 할당되고, 변수처럼 사용할 수 있게 됨

int *a
int *pa
//p는 포인터임을 알려주기 위한 기호로써 생략 가능함.
double *b
//구할 주소가 double형 변수일 때
 

포인터 변수에는 주소 연산자를 사용한 어떤 변수의 주소를 저장해야 함

이 경우 'pa가 a를 가리킨다' 라고 표현하고, pa -> a 로 간단히 나타낼 수 있다.

int *pa = &a
// 포인터 변수 a에 a의 주소를 대입함.
 

실제로 사용하는 방법은

아래에서 *pa = 10; 처럼 사용한다

포인터 변수 pa가 a를 가르키고 있으므로, 이를 실행하면 a 변수의 값이 변하게 됨

따라서 a를 출력하면 10이 나오게 된다.

#include <stdio.h>

int main(void)
{
    int a;
    int *pa = &a;

    *pa = 10;

    return 0;
}
 

※ 추가 중요사항

포인터 변수는 대입 연산자(=) 왼쪽에 올 때에는 변수처럼 사용하고, 오른쪽에 올 때에는 변수의 값으로 사용된다.

 

2) 포인터 이해하기

(1) 주소와 포인터의 차이

주소는 저장 공간 시작 주소 값 자체인 상수이고,

포인터는 이러한 주소를 저장할 수 있는 새로운 메모리 공간으로 변수임

 

 

 

int a, b;
int *p;
p = &a;
p = &b;
 

위를 해석해보면, &a와 &b는 각각 a는 100, b는 200의 주소를 가진 변할 수 없는 상수가 되고, *p는 포인터 변수가 됨.

따라서 변수인 p에는 상수인 a와 b의 주소를 저장할 수 있는 것임.

int a;
int *pa, *pb;
pa = pb = &a;
 

위를 해석하면, 포인터 변수인 pa와 pb는 변수이므로 a의 주소인 상수를 동시에 담을 수 있는 것이고,

이 경우 a의 값을 바꾸는데 pa와 pb를 모두 사용할 수 있게 되는 것임.

 

(2) 주소와 포인터의 크기

결론적으로 말하면 주소와 포인터의 크기는 모두 같다.

따라서 int형이든 char형이든 double형이든 모두 같게 됨.

하지만 여기서 주의할 점은 포인터가 가르키고 있는 변수의 크기는 변수의 자료형의 크기라는 점임.

double db;
double *pdb = &db;
 

위를 보면

&db는 주소의 크기로 4이다.

pdb는 포인터의 크기로 4이다.

*pdb는 포인터가 가르키고 있는 double형 변수 db의 크기로 8이다.

 

 

'LMS 7 > 개발일지' 카테고리의 다른 글

25.06.22 학습일지  (1) 2025.07.24
25.06.19 학습개발일지 / C언어 문법  (1) 2025.07.24
25.06.15 학습개발일지 / C언어  (0) 2025.07.22
25.06.13 학습개발일지 / C언어  (0) 2025.07.22
25.06.12 학습개발일지  (1) 2025.06.12
'LMS 7/개발일지' 카테고리의 다른 글
  • 25.06.22 학습일지
  • 25.06.19 학습개발일지 / C언어 문법
  • 25.06.15 학습개발일지 / C언어
  • 25.06.13 학습개발일지 / C언어
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
25.06.16 학습개발일지 / C언어 문법, 06. 간단한 프로그램 만들기 1
상단으로

티스토리툴바