C Programming [Pointer 2]

 Published On

포인터 활용

  1. 이중 포인터 : 싱글 포인터를 가리키는 포인터

     int i = 100;
     int *p = &i; // p는 싱글 포인터
     int **q = &p; // q는 이중 포인터 
    
  2. 포인터 배열 : 포인터들을 모아서 배열로 만든 것, 배열의 원소가 포인터
    1) 정수형 포인터 배열 int* api[5];
    2) 문자형 포인터 배열 char* fname[4];
    • 각 행들의 길이가 가변적으로 변할 수 있어서 래그드 배열이라고 불린다.
    • 래그드 배열이 일반적인 2차원 배열보다 좋은 점
      • 2차원 배열에서는 사용하지 않는 공간이 낭비될 수 있다
      • 래그드 배열에서는 낭비되는 공간이 없다
  3. 배열 포인터 : 배열을 가리키는 포인터
    • 배열의 이름은 첫 번째 배열 원소를 가리키는 상수 포인터
    • 배열 포인터는 배열 전체에 대한 포인터
    • int (*pa)[10]; // int [10] 배열에 대한 포인터 선언

  4. 함수 포인터 : 함수를 가리키는 포인터
    • 반환형 (*함수 포인터 이름) (매개변수 1, 매개변수 2, … )
    • 함수의 이름은 배열의 이름과 같이 시작 주소를 나타내는 포인터 상수
    • 함수의 이름 앞에 &연산자를 사용할 필요가 없다
    • int (*pf)(int, int);

  5. 함수 포인터의 배열
    • 반환형 (*배열이름[배열의 크기]) (매개변수1, 매개변수 2, … )
    • 함수를 가리키는 포인터들의 배열
    • int (*pf[5])(int, int);

  6. 다차원 배열과 포인터 - 2차원 배열을 메모리에 저장하는 방법
    • 행우선 방법(row-major)
      • 행을 기준으로 하여서 상위 행을 먼저 저장하는 방법. m[0][0], m[0][1] 과 같은 0번째 행에 속하는 원소들을 먼저 저장한 후에, m[1][0], m[1][1] 와 같은 1번째 행에 속하는 원소들을 저장 방법
      • C에서는 행우선 방법이 사용
    • 열우선 방법(column-major)
      • 상위 열을 먼저 저장하는 방법

  7. const 포인터와 volatile 포인터
    • const char *p; // 포인터가 가리키는 대상이 변경이 가능, 하지만 내용은 포인터의 내용은 변경 가능하지 않음
    • char *const p; // 포인터 자체가 변경되지 않음, 하지만 포인터가 가리키는 내용은 변경 가능
    • volatile char *p; // p가 가리키는 내용이 수시로 변경되니 사용할 때마다 다시 로드하라는 의미

  8. void 포인터
    • 순수하게 메모리의 주소만을 가지고 있는 변수
    • 어떤 대상을 가리킬 것인지 정하지 않음
    • * 연산자 불가능, 가리키는 대상이 없기에 -> 명시적 형변환 하면 가능

    • 증감 연산자 불가능

  9. main 함수의 인수
    • int main(int argc, char *argv[])
      • argc -> 명령어가 가지는 인수들의 개수
      • argv -> 명령어가 가지는 인수들을 문자열 형태로 전달


Tags: Language

Comments:

comments powered by Disqus

© 2021 - MH.Ji. All rights reserved
Built using Jekyll