반응형
포인터 배열이란?
-
포인터 들의 배열이다.
-
배열의 요소가 포인터들로 이루어져 있는 배열
선언 방법
-
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 |