본문 바로가기

 

 

1. 포인터란?

 

1.1 포인터

 

  • 포인터다.
  • "가리킨다" 는 의미다. ( ☞ 메모리 공간)
  • 메모리 주소를 저장하는 변수다.

 

#include <stdio.h>

void main()
{
	int n = 100;
	int* ptr_n = &n;

	printf("%d\n", n);      // 100 : int n 출력
	printf("%d\n", *ptr_n); // 100 : ptr_n 역참조
 }

 

 

1.2 포인터 관련 연산자

 

*  Asterisk, 애스터리스크
 참조 연산자  주소 > 데이터 참조
&  Ampersand, 앰퍼센드  주소 연산자  메모리의 첫 Byte 주소

 

참조 연산자와, 주소 연산자다.

연산자다.

++ 연산자처럼, &, * 도 변수에 작용하는 연산자다.

 

#include <stdio.h>

void main()
{
	int n = 100;
	int* ptr_n = &n; // ++ 연산자처럼, &, * 도 변수에 작용하는 연산자다.
	printf("%p\n", ptr_n);

	int ck = ++n;
	printf("%d\n", ck);
}

 

 

1.3 포인터 관련 자료형

 

int int 데이터 자료형  int 크기의 데이터를 의미한다.
4Byte 범위의 데이터를 저장 할 수 있다.
int* int 포인터 자료형
int 주소 자료형
메모리의 주소 값 데이터를 의미한다.
포인터 연산에서 int 크기만큼 연산한다.
char char 데이터 자료형  char 크기의 데이터를 의미한다.
1Byte 범위의 데이터를 저장 할 수 있다.
char* char 포인터 자료형
char 주소 자료형
메모리의 주소 값 데이터를 의미한다.
포인터 연산에서 char 크기만큼 연산한다.

 

포인터 연산은, 포인터 자료형에 따라 다르다.

  • char* 1Byte 단위 연산
  • int* 4Byte 단위 연산

 

 

1.4 포인터 크기

 

  • 32bit에서 메모리의 주소는 4byte 크기를 가진다.
    • 포인터(메모리 주소)는 4byte 크기를 가진다.
    • 포인터 변수는 4byte 크기를 가진다.
  • 64bit에서 메모리의 주소는 8byte 크기를 가진다.
    • 포인터(메모리 주소)는 8byte 크기를 가진다.
    • 포인터 변수는 8byte 크기를 가진다.

 

+ 메모리와 주소와 저장되는 참고 이미지 필요

 

 

② 포인터 관련 연산자의 논리 구조

 

num & 주소 * 데이터

(&num)  (* 주소)  데이터

*(&num)  데이터

*&num  데이터

 

& 는 프로그래밍에서 AND, 즉 "같다"는 의미다.

&num 의미는, 변수와 같은 것, 즉 메모리 주소다.

 

* 는 가르킨다는 의미다.

주소가 가르키는 공간의 데이터를 의미한다.

 

#include <stdio.h>

void main()
{
	//char c = 'a';
	//printf("%I64d\n", sizeof(c));
	//printf("%c\n", c);

	//int n = 100;
	//printf("%I64d\n", sizeof(n));
	//printf("%d\n", n);

	char c1 = 'A';
	char c2 = 'B';
	printf("%c\n", c1);

	char* ptr = &c1;
	printf("         c1 : %c\n",           c1);
	printf("        ptr : %p\n",          ptr);
	printf("       *ptr : %c\n",         *ptr);
	printf("     *(&c1) : %c\n",       *(&c1));
	printf("       *&c1 : %c\n",         *&c1);
	printf("        &c1 : %p\n",          &c1);
	printf(" (char*)&c1 : %p\n",   (char*)&c1);
	printf("  (char*)c1 : %p\n",    (char*)c1); //16진수 포인터 형변환
	printf("  (char*)c1 : %d\n",      (int)c1);
	printf("*(char*)&c1 : %c\n",  *(char*)&c1);
	printf("       *&c1 : %c\n",         *&c1);

	//printf("%x\n", (int)&c1);
	//printf("%p\n", &c1);
	//printf("%d\n", (int)&c1);
	//printf("%d\n", (int)sizeof(&c1));
	//printf("%p\n", &c2);
}

 

 

BasicLike

어? 나 프로그래밍 좋아하네?