[c] 배열 요소로 포인터를 지니는 포인터 배열
#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 라는 하나의 알파벳이 들어가는 것인가?
상식적으로 생각했을 때, 숫자보다 알파벳의 저장공간이 커야 할 것 같은데?