Ch13. 배열&포인터(22/01/26)

이수복·2022년 1월 26일

배열의 이름 = 포인터(상수)

-> 배열의 이름의 주소 값은 첫번째 원소의 주소 값과 동일
-> int형 배열을 선언하여 원소별로 할당되는 메모리 공간의 크기가 4byte
-> 포인터 변수는 주소 값의 변경이 가능하지만 포인터 상수(배열의 이름)은 주소 값의 변경이 불가능

int arr[3] = {0, 1, 2};
printf("배열의 이름 : %p \n", arr);			->0012FF50
printf("첫번째 원소의 이름 : %p \n", &arr[0]);		->0012FF50
printf("두번째 원소의 이름 : %p \n", &arr[1]);		->0012FF54
printf("세번째 원소의 이름 : %p \n", &arr[2]);		->0012FF58

-> type형 포인터를 대상으로 n 증감하면 n * sizeof(type)만큼 크기가 증감

int *ptr = 0x0010;
printf("%p", ptr+1);		-> 0x0014 출력

-> 포인터 변수를 배열의 이름처럼 활용 가능

int arr[3] = {0, 1, 2};
int *ptr = arr;
printf("%d %d \n", ptr[0], arr[0]}		-> 0 0 출력

-> arr[i] == *(arr+i)

int arr[3] = {0, 1, 2};
int *ptr = arr;
printf("%d %d %d \n", arr[0], arr[1], arr[2]);
printf("%d %d %d \n", ptr[0], ptr[1], ptr[2]);
printf("%d %d %d \n", (arr+0), (arr+1), (arr+2));
printf("%d %d %d \n", (ptr+0), (ptr+1), (ptr+2));

포인터와 문자열

-> str1은 문자열 전체를 저장하는 배열, str2는 "Y"의 주소 값을 담고 있는 포인터
-> 배열이름도 포인터(상수)이므로 str1은 주소 값 변경이 불가능하지만 str2는 변경 가능
-> 이와 관련해 str1에 저장된 문자열을 변수형태의 문자열, str2에 저장된 문자열을 상수형태의 문자열

char str1[] = "MY string";		-> ch11에서 학습한 char형 배열을 활용한 문자열 저장
char *str2 = "Your string";		-> 포인터를 활용해 문자열 저장

-> 상수형태의 문자열은 문자 단위가 아니라 문자열 자체를 변경 가능

char *str2 = "Your string";
str2 = "I string";

포인터 배열

-> 포인터 변수로 이뤄진 배열

int num1 = 10, num2 = 20, num3 = 30;
int *arr[3] = {&num1, &num2, &num3};

-> 다수의 문자열을 저장하는 포인터 배열도 구성 가능

char *strArr[3] = {"simple", "area", "idea"};
profile
개발 입문자

0개의 댓글