본문 바로가기

Language, IDE/C, C++

[C++/C] 포인터



오늘 포스팅할 내용은 C/C++의 포인터 입니다.


포인터는 C/C++에서 배열이나 매개변수 부분에서 사용되고 효율적으로 인자를 넘기기위해서 주로 사용됩니다.

컴퓨터공학에(C언어) 처음 입문하시는 분들이 초반에 많이 어려워하고 힘들어하는 부분이기도 합니다.


우선 포인터의 개념에 대해 설명하는 포스팅을 한 후 다음 포스팅에서 포인터 사용예를 포스팅하도록 하겠습니다.


포인터에는 메모리할당을 통한 동적포인터도 존재하지만 예전에 비해 효율성이 떨어지고(예전에는 메모리가 작았기 때문에 메모리 할당 해제를 통해 작은 메모리를 효율적으로 사용하는 경우도 있었다고 한다.) 오히려 잘못쓰면 메모리 낭비가 발생할 수 있기때문에

일반적인 포인터인 정적포인터를 기준으로 설명하겠습니다.

(일반적으로 그냥 포인터라 함은 정적포인터를 말합니다.)



1. 포인터의 개념(정의)

C/C++에서 포인터란 단어의미 그대로 가리키는 자료형입니다.

일반 int, char등의 변수에서 그 변수 안에 숫자값, 문자값이 들어있다면

포인터 변수에는 변수를 가리키는 주소값이 들어있습니다.


한마디로 정의하자면

포인터란 변수를 가리키는 자료형이라 보면 되겠습니다.



2. 포인터 선언

가르키는 변수형에 따라 포인터를 선언한다

변수형* 포인터명;

변수형 * 포인터명;

변수형 *포인터명;

별의 위치는 변수형 포인터명 사이 아무 위치에 와도 상관없습니다.


(코드예시)

int* pointer1;

char* pointer2;



3. 포인터의 크기

(32비트 컴파일러 기준)

포인터의 크기는 아키텍처 메모리주소의 크기와 같습니다.

유즘 64비트 컴퓨터를 많이 사용하지만 컴파일러는 주로 32비트를 사용하므로 주로 32비트 입니다.


32비트 컴파일러 : 32비트

64비트 컴파일러 : 64비트





4. 관련 기호 사용법

  - *(포인터) : 참조값, 해당 포인터가 가르키는 값을 가져온다(포인터에만 사용가능)

  - &(엠퍼센트) : 주소값, 해당 변수의 주소를 가져온다(모든 변수에 사용가능)


예시

(편의상 주소는 1000, 2000이라 가정)

(코드예시)

int i;

int *p;


i = 3;

p = &i; //포인터에 i의 주소값 입력


printf("i : %d\n", i);     // 3(i의 값)

printf("&i : %d\n", &i);  // 1000(i의 주소)

printf("p : %d\n", p);   // 1000(p의 값)

printf("*p : %d\n", *p); // 3(p의 참조값)

printf("&p : %d\n", &p); // 2000(p의 주소값)




5. 예제(예시) 코드

char 배열을 선언하여 설명해보도록 하겠습니다.

(편의상 주소는 1000, 2000이라 가정)

(코드예시)

char str[5];

char* ptr1;


//문자열 마지막에는 null(\0) 삽입됨

strcpy(str, "abcd");



printf(str); //printf(&str[0]); 와 같음

printf("\n");

printf(prt1);


(출력결과)

abcd

abcd


ptr1도 str과 abcd와 같은 abcd가 나옵니다.



잘이해가 되셨나요

이상으로 포스팅을 마치도록 하겠습니다.

궁금하신점은 댓글이나 방명록 남겨주시면 친절히 답변해드리겠습니다^^