C언어 - 포인터

문건우·2024년 4월 5일

모든 데이터들은 메모리의 특정 공간에 저장되어 있다.(그 공간을 '방'이라고 표현하겠다.)

한 방의 크기는 1byte로 정의한다.

프로그램 작동시 컴퓨터는 여러 방들에 있는 데이터를 필요로 한다. 이때, 어떤 방에서 어떤 데이터를 가져올지 구분하기 위해 각 방에 고유 주소(address)를 붙여준다.

포인터는 메모리 상에 위치한 특정한 데이터의 주소값을 보관하는 변수다.

// C언어에서 포인터는 

(포인터에 주소값이 저장되는 데이터의 형) *(포인터의 이름);
or
(포인터에 주소값이 저장되는 데이터의 형)* (포인터의 이름);

// 예를 들어 p라는 포인터가 int 데이터를 가리키고 싶다면

int *p; // 라고 하거나
int* p;	// 라고 한다.

포인터를 정의했으니 값을 넣어야 하는데, 데이터의 주소값을 어떻게 아는걸까?

& 연산자를 사용한다.

단항 & 연산자는 피연산자의 주소값을 불러온다. 사용법은
그냥 이렇게 쓴다.

&주소값을 계산할 데이터
예를 들어 a의 주소값을 알고 싶다면
&a

프로그램을 하나 짜보자면

/* 포인터의 시작 */

#include <stdio.h>
int main() {
  int *p;
  int a;

  p = &a;

  printf("포인터 p 에 들어 있는 값 : %p \n", p);
  printf("int 변수 a 가 저장된 주소 : %p \n", &a);

  return 0;
}

포인터 p 에 들어 있는 값 : 0x7fff894c8b3c
int 변수 a 가 저장된 주소 : 0x7fff894c8b3c

p = &a; 에서 포인터 p에 a의 주소를 대입하였기 때문이다.

연산자 : "나(포인터)를 나에게 저장된 주소값에 위치한 데이터로 생각해줘!"

/* * 연산자의 이용 */
#include <stdio.h>
int main() {
  int *p;
  int a;

  p = &a;
  a = 2;

  printf("a 의 값 : %d \n", a);
  printf("*p 의 값 : %d \n", *p);

  return 0;
}

컴파일하면

a 의 값 : 2
*p 의 값 : 2

const는 어떠한 데이터를 상수로 만들기 위해 붙여주는 키워드

profile
반드시 해내야지

0개의 댓글