-> 배열의 이름의 주소 값은 첫번째 원소의 주소 값과 동일
-> 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"};