Search
Duplicate

포인터의 다양한 예

Created
2021/11/18 08:53
Tags

포인터 사용 예 1

포인터는 할당된 메모리에만 접근 가능
#include <stdio.h> int main(void){ int var = 3; int *ptr = &var; printf("var 메모리 주소 = %p ptr 값 = %p\n", &var, ptr); *ptr += 9; // *ptr = *ptr + 9 printf("var의 값 = %d\n", var); return 0; }
C
복사

포인터 사용 예2

포인터를 이용하여 한 메모리에 접근 및 읽기, 저장 가능
#include <stdio.h> int main(void){ int var = 3; int *ptr1, *ptr2; ptr1 = &var; *ptr1 = 7; printf("var = %d\n", var); ptr2 = ptr1; *ptr2 = 12; printf("var = %d\n", var); return 0; }
C
복사
포인터를 이용해서 메모리주소에 저장된 값을 바꿀 수 있다.

void형 포인터

의미
데이터형이 정해지지 않은 포인터 변수
역할
모든 메모리 주소를 저장만 함
→ 접근을 위한 데이터형 변환 필요
*(데이터형*) 포인터명
형식
void *ptr;
코드
#include <stdio.h> int main(void){ int var1 = 12; void *ptr; ptr = &var1; printf("%d\n", *(int*)ptr); return 0; }
C
복사

포인터와 배열

포인터를 이용하여 배열을 다룰 수 있는 이유?
같은 데이터형, 연속적인 메모리 할당
포인터 변수 + n 와 *(포인터 변수 + n)의 의미
배열의 인덱스와 같은 뜻을 가지고 있다. ptr + 1 일때 다음 메모리주소를 가르킨다.
int array[3];
int *ptr = array;
ptr + 0, ptr + 1, ptr + 2
*(ptr + 0), *(ptr +1), *(ptr +2)
*(ptr+0) 은 %d 정수 출력만 가능한것 같음
실제로 해보니 ptr + 0 같은 경우에 %p 메모리주소 출력가능
배열과 포인터 형식 호환
int array[5] = {1, 2, 3, 4, 5}; int *intptr = array; intptr[0], intptr[1] -> *(intptr + 0), *(intptr + 1)
C
복사

NULL 포인터

의미
아무것도 참조하지 않는 포인터 변수
저장하는 값
0, '\0'(문자상수), NULL(문자열)
포인터를 사용하여 할당한 메모리를 해제했을 때