CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL

SOLID BASICS

[ C ] 주소와 포인터 차이? | 포인터의 크기 | 포인터 자료형 | 포인터 기능
공부 STUDY/C | C++

[ C ] 주소와 포인터 차이? | 포인터의 크기 | 포인터 자료형 | 포인터 기능

2023. 1. 28. 11:18

포인터는 주소를 저장하는 일정한 크기의 메모리 공간이다. 따라서 언제든지 다른 주소를 저장하거나 포인터끼리 대입이 가능하다. 

그러나 일반 변수와는 달리 대입 연산에대한 기준이 까다롭다. 

 

 

주소와 포인터의 차이는 무엇일까?

 

주소:  변수에 할당된 메모리의 시작 주소 값

포인터: 그 값을 저장하는 또 다른 메모리 공간

 

따라서 특정 변수의 주소 값은 바뀌지 않지만 포인터는 다른 주소를 대입하여 그 값을 바꿀 수 있다.

예를들어, 변수 a, b 가 메모리에 할당된 상태라고 해보자.

 

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

여기서 변수 a 의 주소는 100이고, 변수 b 의 주소는 200으로 실행중에는 그 값이 바뀌지 않는다.

반면, 포인터 p는 a 와 b 중 어떤 주소를 대입하냐에 따라 가리키는 변수가 바뀐다. 

 

한 마디로 정리하자면, 주소는 상수이고 포인터는 변수라는 말이다!

 

따라서 두 포인터가 같은 주소를 저장하는 것도 가능하다. (하나의 변수를 동시에 가리키는 것 가능)

 

int a;
int *pa, *pb;
pa = pb = &a; //pa 와 pb에 모두 a의 주소를 저장한다.

그러나 &a. = &b 처럼 a의 주소를 b 의 주소로 바꾸는 것은 불가능하다.

 

주소와 포인터의 크기는?

포인터도 저장 공간이므로 크기가 있다.

포인터의 크기는 저장할 주소의 크기에 따라 결정된다. 

당연한 말이지만 크기가 클수록 더 넓은 범위의 메모리를 사용할 수 있다.

주소와 포인터의 크기는 sizeof 연산자로 확인할 수 있다.

 

포인터는 가리키는 자료형과 상관없이 모두 크기가 같음을 출력을 통해 확일할 수 있다.

 

포인터의 대입 규칙

포인터는 크기가 모두 같기에 대입 연산을 쉽게 생각할 수 있다.

그러나 규칙이 있음!

 

1. 포인터는 가리키는 변수의 형태가 같을 때만 대입해야한다.

- 가리키는 자료형이 다른 포인터 두 개가 있다고 하자. 변수 주소의 범위 오차가 발생하므로 컴파일러가 할당되지 않은 영역을 침범하게 되는 오류가 발생할 수 있다.

 

2. 형변환을 사용한 포인터의 대입은 가능하다.

-가리키는 자료형이 다른 경우라도 형 변환 연산자를 사용하면 경고 메세지 없이 대입이 가능하다. 

 

포인터는 왜 사용할까?

변수를 사용하는 가장 쉬운 방법은 이름을 쓰는 것이다. 

포인터를 쓰려면 추가로 변수를 선언해야하고, 주소 연산, 간접 참조 연산 등 각종 연산을 수행해야한다.

일부러 포인터를 쓸 필요는 없지먼, 메모리에 직접 접근하거나 동적으로 할당한 메모리를 사용하는 경우 포인터는 필수다.

 

포인터는 함수간에 데이터를 효과적으로 공유한다는 이점이 있어 유용하게 쓰인다.

저작자표시 (새창열림)

'공부 STUDY > C | C++' 카테고리의 다른 글

[ C ] 응용 포인터 | 포인터의 주소는? | 부분 배열의 주소 | 2차원 배열의 배열명 | 배열 포인터  (0) 2023.01.29
[ C ] 변수 사용 영역 | 지역 변수 | 전역 변수 | 정적 지역 변수 | 레지스터 변수  (0) 2023.01.29
[ C ] 포인터란? 메모리 주소 | 포인터 연산자( &, *)  (0) 2023.01.28
[ C ] 문자를 저장하는 배열 | char 형 배열 | 문자열 대입 방법 | strcpy(), gets(), puts()  (0) 2023.01.28
[ C ] 배열 | 배열의 선언과 사용  (0) 2023.01.28
    '공부 STUDY/C | C++' 카테고리의 다른 글
    • [ C ] 응용 포인터 | 포인터의 주소는? | 부분 배열의 주소 | 2차원 배열의 배열명 | 배열 포인터
    • [ C ] 변수 사용 영역 | 지역 변수 | 전역 변수 | 정적 지역 변수 | 레지스터 변수
    • [ C ] 포인터란? 메모리 주소 | 포인터 연산자( &, *)
    • [ C ] 문자를 저장하는 배열 | char 형 배열 | 문자열 대입 방법 | strcpy(), gets(), puts()
    CHANGEL
    CHANGEL
    NOT GIVING UP | SOLID BASICS

    티스토리툴바