Study/C,C++

6. 포인터

MeditT 2018. 7. 22. 15:36

포인터

포인터: 주소값을 저장하는 변수. 포인터 자체도 하나의 변수 종류다! (포인터변수)

포인터 선언

int *ptr;


포인터 초기화

방법1: 변수 주소 대입

  
int val = 10;
int *ptr;
ptr = &val;

방법2: malloc이용. 동적 메모리 할당. 꼭 free 해주어야 한다!

  char *ptr = (char*)malloc(100); // char형 공간 100개의 시작주소를 ptr에 지정
*ptr = 'a'; //ptr이 만들어진 빈 공간에 a 넣음.


int age = 20;
int *agePtr = malloc(sizeof(age)); //age의 크기만큼 할당. agePtr이 가리키는 공간 안에는 쓰레기값이 저장되어있다.


free(ptr);
free (agePtr); //malloc이용한 할당은 꼭 free해주어야 한다!

방법3: 문자형 포인터. 문자열의 시작 주소 저장

  
char *ptr = "POINTER"; //문자열은 그냥 지정만 해주어도 된다
printf("%s", ptr+2); //INTER 출력




포인터 연산

* : 포인터가 가리키는 변수의 내용. 포인터변수에 붙여준다.

&: 변수의 주소. 일반 변수에 붙여준다.

ex)

  int a = 50; // a의 메모리주소는 100이라고 가정.
int *ptr = &a; // ptr에 a의 주소를 저장한다.
printf("%d\n", ptr); //ptr은 100
printf("%d\n", *ptr); //ptr이 가리키는 주소(100번지)의 내용은 50





포인터와 문자열

getchar(), putchar()

getchar() : 문자를 '한 글자만' 입력받는 함수. scanf와 비슷.

putchar(): 문자를 '한 글자만' 출력하는 함수. printf와 비슷.

간단하게 입력버퍼를 비워줄 때 getchar()를 사용한다.

입력버퍼를 비우는 방법



포인터 배열

포인터 배열: 여러 개의 포인터를 하나의 배열로 구성한 것. 배열+포인터의 특징을 모두 이용 가능

char *ptr[20];

char 배열의 마지막에는 '\0'(널문자)가 저장되는 것 주의!

포인터 배열을 이용하여 문자열을 저장하면, 저장하는 문자열의 길이에 따라 메모리가 할당된다. → 메모리 효율적!



포인터의 포인터

포인터의 포인터: 포인터를 가리키고 있는 포인터

int **ptr;


'Study > C,C++' 카테고리의 다른 글

[오류] 클래스 템플릿 "std::array"에 대한 인수가 너무 적습니다  (0) 2019.06.26
7. 구조체  (0) 2018.07.22
3.1 연산자  (0) 2018.07.19
2.3 진법 , 기본형  (0) 2018.07.19
2,1 변수와 자료형  (0) 2018.07.16