C언어 - 포인터1, 선언과 초기화

2022. 5. 25. 20:18·C프로그래밍/개인 공부
728x90

컴퓨터는 데이터를 '메모리'라는 물리적인 장치에 쓰고 읽고 지운다.

다른 언어와 차별화를 시키는 '포인터'라는 개념은 C를 더 특별하게 만든다.

바로 '직접 접근'이 가능하기 때문이다. 다시 말해, 더 기계친화적인 프로그램을 만들 수 있다.

 

포인터란?

메모리에 있는 데이터의 주소를 가지는 일종의 변수이다. '주소'에 주목을 하자. 데이터를 가지는게 아니라 데이터가 들어가있는 메모리의 주소를 가진다. pointer를 한글로 번역해보면 '가르키는 것'이다. 즉, 변수의 주소를 가르킨다고 볼 수 있다.

 

포인터를 사용하는 이유?

데이터의 복사를 피하고 데이터를 공유하여 작업할때 필요하다. 데이터의 복사본을 가지고 노는게 아니라 데이터의 원본을 다룰 수 있다.

직접 접근하기 때문이다. 쉽게 설명하자면 예를 들어, 누군가 배열이 뭔가요? 질문했을때 c언어 책에있는 배열설명을 전부 복사해서 주는것보다 배열이 설명되어있는 쪽수를 말해주는 것이다. 배열이 설명되어있는 복사본 전부를 가위로 자르고 불로 태워도 c언어 책에있는 원본은 그대로 있다. 하지만, 쪽수를 알려준다면 원본에 '직접 접근'할 수 있다.

사용 예(주소연산자 &)

int i;이렇게 변수를 정의 했다면, &i를 하면 변수 i의 메모리 상 주소를 알 수 있다.

int i=10;
printf("%u", &i);
 
이렇게 해보면, i라는 변수에 10을 저장하고 &i로 변수 i가 있는 주소를 %u 십진수 형태로 출력한다.(원래는 %p 형식지정자, 16진수로 출력한다.) 글쓴이는 1871557720가 나온다. 즉, 변수 i는 10인데 이 변수가 1871557720위치에 있는 메모리 주소에 들어가 있다는 뜻이다.

포인터의 선언과 초기화

이번엔 포인터를 선언해보자.

int *p; 포인터는 이렇게 선언한다. 하지만, 선언만 했지 초기화는 하지않았다.

char *c

double *d

float *f 다양한 자료형으로 선언이 가능하다.

 

이젠 선언 후 초기화 까지 해보자.

int i = 25;

int *p = &i;

데이터가 25인 변수 i를 만들고 변수 i의 주소를 포인터 p에 저장한다.

 

printf("&u", &i);

printf("&u", p);

이걸 실행시켜보면 동일한 주소가 나온다. &i또한 변수 i의 주소이고, 포인터변수 p또한 변수 i의 주소로 초기화를 해줫기 때문이다.

 

 

 
728x90

'C프로그래밍 > 개인 공부' 카테고리의 다른 글

C언어 - 쉽게 풀어쓴 C언어 express 10장 배열 실습문제(짝수번)  (0) 2022.07.13
C언어 - 정렬  (0) 2022.07.06
C언어 - 배열과 함수  (0) 2022.07.06
C언어 - 배열의 복사, 비교  (0) 2022.07.04
C언어 - 배열요소의 개수 계산(sizeof)  (0) 2022.07.04
'C프로그래밍/개인 공부' 카테고리의 다른 글
  • C언어 - 정렬
  • C언어 - 배열과 함수
  • C언어 - 배열의 복사, 비교
  • C언어 - 배열요소의 개수 계산(sizeof)
Jminu
Jminu
    250x250
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Web
      • Linux
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
      • Qualcomm 기업과제
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Git
    가상 주소 공간
    매개변수 포인터
    파이썬
    C++
    스택
    동적 배열 스택
    이진 트리
    c언어
    피보나치
    커밋 아이디
    포인터
    동적메모리
    INIT
    commit
    Batch OS
    rubik pi 3
    버퍼
    백준
    원형 덱 구현
    파일 입출력
    루빅보드
    Branch
    yolo
    커널
    자료구조
    순환
    그래서 컴퓨터는 어떻게 동작하나요?
    소수
    rubikpi3
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jminu
C언어 - 포인터1, 선언과 초기화
상단으로

티스토리툴바