Programming/C++

[c] 배열 요소로 포인터를 지니는 포인터 배열

OKOK 2017. 5. 14. 12:32

#include<stdio.h>


int main(void)

{

int a = 10, b = 20, c = 30;

int* arr[3] = { &a, &b, &c };


printf("%d\n", *arr[0]);

printf("%d\n", *arr[1]);

printf("%d\n", *arr[2]);


return 0;

}


1. 배열 요소로 포인터를 넣을 수 있다.

2. 포인터는 주소값을 저장하는 변수 이다.



#include<stdio.h>


int main(void)

{

char * arr[3] = {

"Fervent-lecture",

"TCP/IP",

"I LOVE YOU"

};


printf("%d \n", &arr[0]);

printf("%d \n", &arr[1]);

printf("%d \n", &arr[2]);


printf("%s \n", arr[0]);

printf("%s \n", arr[1]);

printf("%s \n", arr[2]);

return 0;

}


1. char *arr[3] 을 통해서 3개의 문자열을 선언하고 초기화한다. 배열 첨자의 주소값을 보면 4바이트씩 설정되어 있는 것을 볼 수 있다.

2. 왜 이렇게 되는 것이지? 문자열 하나에 4바이트씩 할당하는 것인가? char 라면 바이트 하나만 증가해야 되는 것 아닌가?


#include<stdio.h>


int main(void)

{

char * arr[3] = {

"Fervent-lecture",

"TCP/IP",

"I LOVE YOU"

};


char arr2[3] = { 'a','b','c' };


printf("%d \n", &arr[0]);

printf("%d \n", &arr[1]);

printf("%d \n", &arr[2]);


printf("%s \n", arr[0]);

printf("%s \n", arr[1]);

printf("%s \n", arr[2]);

printf("%d \n", &arr2[0]);

printf("%d \n", &arr2[1]);

printf("%d \n", &arr2[2]);


printf("%c \n", arr2[0]);

printf("%c \n", arr2[1]);

printf("%c \n", arr2[2]);

return 0;

1. 기존의 char 는 1바이트 메모리를  할당하는 것을 확인 할 수 있다.

2. 이를 통해서 char* 의 경우에는 4바이트씩 할당된다는 것을 알 수 있다.

3. 궁금점: 4바이트의 메모리에 숫자가 어떻게 기입되는 것일까?

  예를 들어 int 형이라면 4바이트트에 단순하게 1 이라는 숫자만 저장되어 있는 것인가?

  char 형의 경우 1바이트에 a 라는 하나의 알파벳이 들어가는 것인가?

  상식적으로 생각했을 때, 숫자보다 알파벳의 저장공간이 커야 할 것 같은데?