C language - 6. pointer(포인터)

1.  메모리와 주소

컴퓨터의 메인메모리는 1byte 단위로 각각 주소가 16진수의 고정된 값이 배정되며 오른쪽 그림을 예를 들어 int(4bytes)형 변수 a를 선언 한다고 했을 때 임의의 연결된 4bytes의 공간에 int형 변수 a가 배정되게 됩니다. 이 때 배정된 4개의 공간중 가장 작은 주소값인 0x000102가 변수 a의 메모리 주소값이 됩니다. 









2. 포인터란?

포인터는 메모리의 주소값을 저장할 수 있는 변수로 어셈블리어, C, C++ 등 하위레벨까지 제어 할 수 있는 언어들에서 많이 쓰이며 Java나 타 언어들에선 쓰이지 않습니다.
포인터의 선언은 위와 같이 자료형과 변수명 사이에 *만 추가하면 됩니다.

일단 선언하게 되면 자료형에 관계없이 기계나 OS에 맞춰서 일정한 크기(대부분 4byte)가 주어져
변수를 보면 우리가 알고 있는 크기들로 나왔지만 포인터들은 모두 4byte로 나오는 것을 볼 수 있습니다. 또한 배열은 모두 10의 크기를 주었기 때문에 그에 10배에 해당되는 크기를 가지고 있습니다.

3. 포인터의 심화

포인터는 간단히 말해서 주소를 저장하는 공간 이라고 말할 수 있습니다만 실제론 기능을 더 가지고 있습니다.
기본자료형을 선언했을 때에는 각 자료형마다 저장될 크기와 읽어들인 2진수를 변환하는 방법이 다릅니다.

마찬가지로 포인터 또한 선언된 자료형에따라 읽어들일 크기와 2진수의 변환하는 방법이 다릅니다.

위 그림은 임의의 자료형 p를 char형 int형 double형 포인터들이 가리킬때 가져오는 값을 주소하나에 1비트씩 저장되있다고 가정했을때 만든것입니다. 위와같이 같은곳을 가리키더라도 선언된 자료형에 따라 가져오는 값이 달라질 수 있습니다.

또한 가져오는 값이 같은 상황에서도 2진수를 변환하는 방법이 고정소수점방식이냐 부동소수점방식이냐 혹은 signed냐 unsigned냐에 따라 얻어지는 값이 달라질 수 있습니다.

4. 결론

포인터에 저장되는 값은 단순 주소값이기는 하나, 선언된 자료형에 따라 얻어지는 값이 달라질 수 있다.

다중포인터를 보면 int ** a, long ***** b 이런식으로 되있지만 단순하게 생각해서 *의 개수만큼 변수에 저장된 값의 주로소 이동하면 선언된 자료형의 값이 저장되있다는 뜻이 됩니다.

 long ***** b를 보게되면 아래와 같이 되어있다고 보면 되겠습니다


Related Posts:

  • C language - 1. primitive data type(기본 자료형) 1. 변수란?  프로그래밍 언어에서 값을 저장하거나 저장된 값을 읽거나 다른 값을 넣을 수 있는 공간을 할당받는 것을 변수라고 합니다. 이러한 변수들의 크기를 크게 잡으면 광활한 범위의 값을 저장할 수 있겠지만 작은 값을 필요로 하는 변수에 비해 훨씬 큰… Read More
  • C language - 3. file I/O(파일 입출력) 파일 입력함수에는 getc(), fgetc(), fgets(), fscanf(), fwrite()가 있고 파일 출력함수에는 putc(), fputc(), fputs(), fprintf(), fread()가 있습니다. 1. 텍스트 파일 입출력 #… Read More
  • C language - 2. standard I/O(표준 입출력)1. 표준 입출력  C언어에서 입출력 함수는 표준 입출력함수와 파일 입출력함수로 나뉩니다. 파일 입출력은 외부에서 값을 입력받거나 저장하는 반면에 표준 입력함수는 일반적으로 키보드의 입력을 받고 표준 출력함수는 일반적으로 모니터에 출력을 하게됩니다. 표준… Read More
  • C language - 6. pointer(포인터)1.  메모리와 주소 컴퓨터의 메인메모리는 1byte 단위로 각각 주소가 16진수의 고정된 값이 배정되며 오른쪽 그림을 예를 들어 int(4bytes)형 변수 a를 선언 한다고 했을 때 임의의 연결된 4bytes의 공간에 int형 변수 a가 배정되게 됩니다.… Read More
  • C language - 4. string function(문자열 함수)<string.h>의 헤더파일에는 문자열과 관련되있는 함수들을 정의하고 있습니다. 1. 문자열 복사  문자열을 복사하는 함수에는 strcpy()와 strncpy()가 있습니다. strncpy() 함수에서 str3보다 1작은 크기만큼 복사해야… Read More