ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C언어] 6-2. 포인터
    프로그래밍/C 2014. 4. 7. 21:30

    1. 포인터의 개념

    - C에서 모든 변수는 데이터 값과 할당된 기억공간의 주소를 가지고 있다

    - 포인터는 기억공간의 주소를 의미하며 일반변수가 데이터 값을 저장하는 메모리 공간이라면 포인터 변수는 변수가 할당받은 기억공간의 주소를 값으로 갖는 변수라 할 수 있다.


    2. 포인터 변수


    * 포인터 변수의 선언

    - 포인터 변수의 경우 변수명 앞에 *(Asterisk Mark)를 붙여서 일반변수와 구분한다.

    데이터형 *포인터 변수명;

    - 여기서 주의할 점은 포인터 변수 앞에 선언한 데이터형은 포인터 변수 자신의 타입이 아닌 포인터 변수가 가리키게 될 변수(또는 변수 안에 들어 있는 값)의 타입이라는 점

    - 모든 포인터 변수는 크기가 4byte이다 (32비트 컴퓨터 기준)

    int *p;

    - 포인터 변수 p는 정수형 값이 들어 있는 메모리의 주소를 가진다는 의미이다.


    * 포인터 변수의 값 지정

    - 포인터 변수에는 값이 저장되어 있는 메모리의 주소를 할당하므로 주소 연산자인 & 기호를 변수명 앞에 사용하여 변수의 주소를 대입

    - 변수 a주소는 &a로 표기

    - 변수의 주소를 나타낼 때는 주소 연산자 &를 사용하고 포인터가 가리키는 변수에 접근할 때는 간접 참조 연산자인 *를 이용


    3. 포인터와 기억공간의 표현




    * 포인터와 데이터형별 기억공간의 대응관계

    - 포인터 변수를 선언할 때 포인터 변수 앞에 가리키는 기억공간에 저장된(될) 값의 데이터 형을 반드시 지정해 주어야 한다.

    - 지정한 데이터형에 따라 포인터가 가리키는 기억공간의 크기, 번지가 서로 다르다.

    - 포인터는 문자열 처리에 효과적인 방법 중 하나인데 문자열은 ""안에 표현한 문자들의 집합을 의미


    4. 포인터와 배열의 관계

    - 배열에서 배열의 이름은 배열의 시작주소를 가리키는 포인터의 개념으로 사용

    - 임의의 포인터가 배열을 가리키는 경우 배열의 모든 원소는 포인터를 이용해서 접근이 가능

    - 포인터와 배열명은 같은 장소를 가리키는 역할을 하게된다.

    - 포인터에 배열의 주소를 지정할 때는 배열이름을 사용하는 경우와 배열요소의 이름을 사용하는 경우로 구분

    - 배열의 이름을 사용하는 경우 이름 앞에 & 기호를 생략하지만 배열요소를 사용하는 경우는 & 기호를 붙여서 나타낸다.

    - 배열의 경우 연속적인 기억공간으로 데이터가 들어갈 영역이 고정이 되지만 포인터의 경우는 유동적으로 기억공간을 활용할 수 있어 배열보다 활용가능한 폭이 더 넓다.


    5. 포인터 배열

    - 포인터 배열이란 포인터가 여러 개 사용될 때 이러한 포인터 변수들을 배열로 선언하여 체계적으로 변수를 관리하는것을 의미

    - 다음과 같이 선언된 포인터 변수를 포인터 배열로 선언 가능

    int *num1, *num2, *num3, num4;  => int *num[4];




    6. 이중 포인터

    - 이중 포인터란 포인터를 가리키는 포인터의 의미로 데이터가 있는 기억공간을 이중으로 가리키는 포인터를 말한다.

    - 이중 포인터가 가리키는 주소에는 데이터 값이 아닌 주소가 들어있고, 그 주소로 다시 이동했을 때 실제 사용할 데이터가 내장

    - 이중 포인터의 선언은 다음과 같다

    int **p;


    * 정리후기

    - 확인연습문제는 다 풀린다. 그런데 이걸 코딩할수 있을지는 모르겠다. 아는 형이 자료구조, 알고리즘을 참고하라고 했는데.. 이론적인 부분보다 실무적인 부분에서 할수 있었으면 좋겠다.

    '프로그래밍 > C' 카테고리의 다른 글

    [C언어] 7-2. 공용체  (0) 2014.04.09
    [C언어] 7-1. 구조체  (0) 2014.04.09
    [C언어] 6-2. 포인터  (0) 2014.04.07
    [C언어] 6-1. 배열  (0) 2014.04.07
    [C언어] 5-4. 기억클래스  (0) 2014.04.06
    [C언어] 5-3. 사용자 정의 함수  (0) 2014.04.05

    댓글 0

Designed by Tistory.