묻공러
[C] 포인터
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (511) N
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • C# (14) N
      • [루키스] C# (9) N
      • [루키스] 자료구조 (3) N
      • [루키스] 실전 문법 (2) N
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 - 언리얼 (123)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
    • 게임 엔진 - 유니티 (10) N
      • [최적화] 유니티 (4) N
      • [루키스] 유니티 (6) N
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
C/[코드조선] C 핵심

[C] 포인터

2024. 2. 8. 10:06

참조 vs. 역참조

참조: 포인터를 의미하며, 변수의 값을 직접 다 들고 있는 게 아니라, 메모리 주소를 읽는 것

역참조: 변수의 값을 직접 읽는 것이 아니라, 메모리 주소를 통해 타고 가서 값을 읽는 것

 

// 직접 접근
int score = 100;
score = 50;

// 간접 접근
int score = 100;
int* ptr_to_score = &score; // 포인터를 통해 참조
*ptr_to_score = 50;         // 역 참조 연산자(*)를 통해 역참조

 

 

NULL 포인터

NULL 포인터는 아래와 같은 경우에 사용한다

1. 포인터의 초기화

 

2. 포인터가 더이상 사용 중이지 않음을 알리고 싶을 때

ptr = NULL;

 

3. 포인터가 유효한 메모리 주소를 참조하고 있는지 확인할 때

if (NULL == ptr) 
{ 
	/* alert */ 
}

 

 

void 포인터 주의점

1. void*에 역참조 연산을 가할 때,

해당 메모리 주소부터 몇 바이트를 읽어야 값이 나오는지 모른다

 

2. void*에 정수 산술 연산을 가할 때,

해당 메모리 주소부터 몇 바이트 이동해야 할지 모른다

 

 

배열과 sizeof()

배열 이름은 배열의 시작 주소이며

sizeof()를 사용하면 배열의 총크기를 구할 수 있다

여기서 총 크기는 바이트 기준으로 구해지기 때문에

배열의 자료형에 따른 크기는 추가적인 연산을 통해 구해야 한다

 

//sizeof(배열 이름) = 배열 개수 * 배열 자료형 크기

int arr[10] = { 0, };
int size = sizeof(arr);// 10 * 4 = 40의 결과가 나오게된다
int arrSize = sizeof(arr)/4;// 이렇게 하면 배열 개수가 나오게된다

 

 

포인터와 배열

sizeof()를 사용하면 배열과 포인터(배열의 시작주소)의 차이를 극명하게 구분할 수 있다

int main(void)
{
    int arr[3] = { 1, 2, 3 };
    int* ptr = arr;

    int sizeof_arr = sizeof(arr);// 3 * 4 
    int sizeof_ptr = sizeof(ptr);// 3
    
}

 

 

문자열의 두 가지 방법

// 첫번째 방법
char ch1[] = "ff";

// 두번째 방법
//char* ch2 = "ff";// 비추천
const char* ch2 = "ff";

두 번째 방법에서 const 키워드를 붙여주는 이유는

문자열 리터럴은 읽기 전용 메모리에 저장되기 때문에

해당 문자열을 수정하려는 시도는 undefined behaviour을 유발할 수 있다

따라서, const 키워드를 붙여 문자열을 수정하려고 하면 컴파일러에서 경고가 발생시킬 수 있다

 

 

댕글링 포인터(Dangling Pointer)

더 이상 접근 할 수 없는 메모리 주소를 저장하고 있는 포인터를 의미한다

 

함수 포인터(Pointer to function)

함수 포인터는 함수의 시작 명령어 주소를 담고 있는 포인터를 의미한다

 

콜백 함수(Call-Back Function)

특정 이벤트가 발생했을 때 자동으로 호출되게끔 등록해 두는 함수를 콜백 함수라고 한다

 

이중 포인터(Double pointer)

포인터의 메모리 주소를 저장하기 위한 포인터 변수를 의미한다

저작자표시 비영리 변경금지 (새창열림)

'C > [코드조선] C 핵심' 카테고리의 다른 글

[C] strcmp()  (1) 2024.02.09
[C] strlen()  (0) 2024.02.09
[C] 재귀 함수 (Resurcive Function)  (0) 2024.02.07
[C] 변수의 종류  (0) 2024.02.07
[C] 스코프와 스택프레임  (0) 2024.02.06
'C/[코드조선] C 핵심' 카테고리의 다른 글
  • [C] strcmp()
  • [C] strlen()
  • [C] 재귀 함수 (Resurcive Function)
  • [C] 변수의 종류
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.