study/C언어

포인터 배열과 배열 포인터에 대한 이해

IT공부 2020. 6. 29. 23:17
반응형

포인터 배열이란?

  • 포인터 들의 배열이다.

  • 배열의 요소가 포인터들로 이루어져 있는 배열

선언 방법

  • char* arr [3];

  • 배열 요소의 자료형이 char* (포인터)인 배열

  • 그 배열의 요소의 개수가 3개 

arr [0], arr [1], arr [2]은 어떤 메모리를 가리키고 있다.

char* arr [3]은 메모리 3곳을 가리키고 있는 배열입니다.  


포인터 배열 예제 

#include <stdio.h>

int main(void){
	const char* arr[3]; //포인터 배열 선언. 
	int i;
	
	arr[0] = "Block";
	arr[1] = "someting";
	arr[2] = "like";
	
	for(i = 0; i < 3; i++)
	{
		printf("arr[%d] -> %s\n", i, arr[i]);
	 } 
	 
	 return 0;
}


포인터 배열 예제 2 (동적 할당)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
	char* arr[3];
	char tmp[30]; 
	int len, i;
	
	for(i = 0; i < 3; i++) 
	{
		printf("[%d] : ", i);
		scanf("%s", tmp);
		len = strlen(tmp) + 1;
		printf("[%d] : tmp \t주소 : %p\n", i, &tmp);
		
		arr[i] = (char *)malloc(sizeof(char) * len);
		printf("[%d] : arr[%d]\t주소 : %p\n\n", i, i, &arr[i]);
		
		strcpy(arr[i], tmp);
	}
	
	printf("\n");
	for(i = 0; i < 3; i++)
	{
		printf("arr[%d] : %s\t주소 : %p\n", i, arr[i], &arr[i]);
	}
	
	for(i = 0; i < 3; i++)
	{
		free(arr[i]);
	}
	
	return 0;
}


배열 포인터란?

특정 사이즈의 배열만을 가리킬 수 있는 하나의 포인터이다. 

 

선언 방법

타입 이름 (*변수명)[N]

포인터가 타입 쪽에 붙는 게 아니라 변수 이름 쪽에 소괄호 안에 붙게 됩니다.

 

ex) char (*arr)[3];

char 타입의 인덱스를 3개 가지고 있는 배열을 가리키는 포인터입니다.

 

int* pNum; 은 int 타입을 가리키는 것이고, arr은 char타입의 배열 사이즈[3]인 배열을 가리키는 것입니다. 

 

 

배열 포인터 예제

#include <stdio.h>

int main(void)
{
	char (*arr)[3];
	int i;
	char tmp1[3] = {'a', 'b', 'c'};
	char tmp2[3] = {'d', 'e', '\0'};
	char tmp3[4] = {'p', 'o', 'q', 'r'};
	
	printf("tmp1[3] 주소 :  %p\n", tmp1);
	printf("tmp2[3] 주소 :  %p\n", tmp2);
	printf("tmp3[3] 주소 :  %p\n", tmp3);
	
	printf("\n");
	printf("\n");
	
	arr = &tmp1; //arr은 tmp1의 주소를 가르킵니다. 
	printf("arr의 주소 : %p\t 문자열 : ", arr);
	for(i = 0; i < (int)sizeof(*arr); i++)
	{
		printf("%c", (*arr)[i]);
	 } 
	
	printf("\n");
	
	arr = &tmp2; //arr은 tmp1의 주소를 가르킵니다. 
	printf("arr의 주소 : %p\t 문자열 : ", arr);
	for(i = 0; i < (int)sizeof(*arr); i++)
	{
		printf("%c", (*arr)[i]);
	 }
	 
	 printf("\n"); 
	 
	 return 0;
 } 
 
 

 

"포인터 배열"은 포인터가 여러 개 모여서 배열로 있는 것이고

"배열 포인터"는 배열 타입을 가리키는 하나의 포인터라는 것입니다.

'study > C언어' 카테고리의 다른 글

define 매크로와 inline 함수  (0) 2020.06.29
동적 할당 정리(malloc, realloc, calloc, free 함수)  (0) 2020.06.29
WIN API [GetVolumeInformation() 함수]  (0) 2020.04.08
구조체 정리  (0) 2020.04.02
[c언어] 입출력 정리  (0) 2020.04.02