본문 바로가기
컴퓨터 프로그래밍/c 언어 (c programming language)

C 언어 - 포인터(Pointer)

by JaeBaek 2020. 9. 27.

Pointer (Wikimedia)

포인터

 포인터란 가리키는 자를 뜻하는 의미로서 변수의 주소 값(address)를 저장하는 변수를 의미합니다. 즉, 메모리 공간에서 변수가 존재하는 위치인 주소 값을 저장하는 변수가 포인터인 것입니다. C 언어에서 포인터는 주소 값을 포인터에 저장함으로써 변수를 가리키는 행위를 합니다. 기본적인 문법 구조는 다음과 같습니다. 

포인터 선언 형식 참조자료형* 포인터이름;

 

ex) 포인터

# include <stdio.h>

int main(void){
	int a=1;
	int* pa;
	pa=&a; 
	printf("%d\n",a); //변수 a의 값 
	printf("%d\n",pa); //변수 a의 주소값 (adress)  
	*pa=2; // *포인터=변수  
	printf("%d",*pa);
    printf("%d",a);
}

※ result
1
6487572
2
2

 포인터로 사용할 자료를 참조자료형에 *을 붙이면 포인터가 가리키는 대상 변수의 자료형이 됩니다. 변수 a의 주소 값을 활용하고 싶다면 &을 변수 앞에 붙여 &a로 활용을 하면 됩니다. 그리고 변수 pa에 * 연산자를 붙이면 이는 변수 a 그 자체가 됩니다. 즉 다시말해서 *pa가 변수 a와 같게 되는 것입니다. 

변수 1. 자료형 변수이름;
2. 변수에 값을 할당
포인터 1. 참조자료형* 포인터이름;
2. 변수에 주소를 할당
3. *포인터이름=변수

 

■ 동적 메모리 할당과 해제

 지금가지 변수를 사용하기 위해서는 메모리 공간의 일부를 할당받는 것을 알 수 있었습니다. 하지만 변수를 선언하지 않고도 프로그램 실행 시 필요에 따라 메모리를 할당받아 사용하고 해제할 수 있는데 이것을 동적 메모리 할당과 해제라고 합니다. 프로그램 필요시에 따라 메모리를 할당받는 방법은 메모리를 절약할 수 있는 방법입니다. 

 

 동적 메모리 할당은 메모리 공간 할당을 위한 malloc() 함수를 사용을 할 수 있습니다. 동적 메모리 해제는 malloc() 함수를 사용해 할당한 공간을 다시 해제하는 것으로 free() 함수를 사용하고 할당 해제 모두 <stdlib.h> 나 <malloc.h>를 통해서 헤더 파일을 포함할 수 있습니다.

동적 메모리 할당과 해제
void *malloc (size_t size);
void free(void *p);

 

ex) 두 값 교환하기

두 값을 할당받아서 함수 원형 선언을 한 후 포인터를 이용해 두 값을 바꾸도록 하라.

# include <stdio.h>

int swap(int* x, int* y){
	int block;
	block=*x;
	*x=*y;
	*y=block;
}

int main(void){
	int a,b;
	
	printf("두 값 입력 : ");
	scanf("%d%d",&a,&b);
	printf("x=%d , y=%d\n",a,b); 
	
	swap(&a,&b);
	printf("exchange\n");
	printf("x=%d , y=%d",a,b);
}

※ result
두 값 입력 : 2 3
x=2 , y=3
exchange
x=3 , y=2

 

※ sizeof() 사용하기

# include <stdio.h>

int main(void){
	int a[3]={1,2,3};
	int b,c;
	b=sizeof(a);
	c=sizeof(a[0]);
	printf("%d\n",b); // 4byte int가 3개 이므로 12 출 력  
	printf("%d",(b/c)); // (4byte * 3 ) / (4byte * 1) = 3 
}

※ result
12
3

sizeof(A)는 A배열의 전체 byte의 수를 구하는 기능입니다. 따라서 전체 byte에 배열 원소 하나에 대한 byte의 수를 나누어주면 배열의 개수를 구할 수 있습니다. 

'컴퓨터 프로그래밍 > c 언어 (c programming language)' 카테고리의 다른 글

C 언어 - random  (0) 2020.09.27
C 언어 - 구조체(Structure)  (0) 2020.09.27
C 언어 - 배열(Arrangement)  (0) 2020.09.27
C 언어 - 함수  (0) 2020.09.27
C 언어 - 반복문(Loop)  (0) 2020.09.26

댓글