본문 바로가기
2학년 2학기/c언어

9-1장 포인터란?

by kkkkk1023 2024. 10. 28.
❓포인터란?

: 주소 그 자체이다. 즉, 메모리의 주소이다.

 

❓포인터 변수란?

: 메모리의 주소를 가지고 있는 변수를 의미한다.

 

 

메모리

: 변수가 저장되는 공간을 의미한다. 메모리는 byte 단위로 접근할 수 있다. 

 

메모리에는 데이터 영역, Heap 영역, Stack영역이 있다. 

 

 

데이터 영역: 전역 변수 및 static 변수가 할당되는 영역

(프로그램의 시작 시 할당되어 종료 시 소멸된다.)

 

Heap영역: 프로그래머가 할당하는 영역

(프로그래머가 명시적으로 할당하고 소멸시킨다.)

 

 

Stack 영역: 함수 호출 시 생성되는 지역 변수 및 매개 변수가 저장되는 영역

( 함수 호출이 완료되면 소멸된다.)

 

 

 

 

 

자료형 별 메모리에 저장되는 형식

int main(void){
    int i = 10;
    char c = 69;
    float f = 12.3;
    return;
}

 

 

위의 사진 처럼 각각의 크기에 따라서 저장이된다.

 

❓ 그런데 왜 char 형과 float형 사이에 3byte가 있는 걸까?

: 메모리는 4byte씩 읽기 때문에 C는 1byte라고 하지라도 메모리가 읽는 byte는 4byte이기 때문에 float은 3byte뒤인 12부터 저장된다.

 

 

 

포인터 연산자 - 변수의 주소(&)

: 변수의 주소를 계산하는 연산자는 &이다. 즉, 변수 앞에 &를 사용하면 해당 변수의 주소를 가져올 수 있다.

 

 

 

 

 

포인터(변수)의 선언

: 포인터(변수)란 주소를 가지고 있는 변수이다. 정수형 변수의 주소를 가지면 정수형 포인터 변수, 실수형 변수의 주소를 가지면 실수형 포인터 변수라고 불린다.

 

 

 

 

int number = 10; //정수형 변수 number에 저장
int *p; //정수형 포인터 변수 p 선언
p = &number; //포인터 변수 p에 number 변수의 주소 저장

 

 

 

 

포인터 연산자 - 간접 참조 연산자(*)

: 포인터가 가리키는 값을 가져오는 연산자

 

포인터 변수(*) vs 간접 참조 연산자(*)

  포인터 변수(*) 간접 참조 연산자(*)
의미 주소를 담는 변수 선언 포인터 변수가 가르키는 값에 접근
사용법 int *p; char *c; ... printf("%d", *p); *p = 10;
연산자 여부 X O

 

 

예제 - 포인터 변수가 가르키는 메모리의 값을 간접 참조 연산자(*)를 이용해서 변경하기

#include<stdio.h>

int main(){
    int number = 10;
    int *p;

    p = &number;
    printf("변수 number의 값1 = %d\n", number);

    *p = 20;
    printf("변수 number의 값2 = %d\n", number);

}

// [출력]
// 변수 number의 값1 = 10
// 변수 number의 값2 = 20

 

'2학년 2학기 > c언어' 카테고리의 다른 글

9-3장 포인터와 함수  (0) 2024.10.28
9-2장 포인터의 연산  (0) 2024.10.28
8장 함수  (0) 2024.10.25
7장 배열  (1) 2024.10.25
6장  (1) 2024.10.25