C 프로그래밍 - 10주차 : 배열과 포인터
메모리와 주소
복습 : 정수형 변수의 메모리 할당
- 메모리는 바이트 단위로 나뉘며, 각 바이트에는 주소가 지정되어 있음
- 정수형 변수의 크기는 4바이트이므로, 정수형 변수 a를 선언하면 임의의 위치에 4바이트가 자리잡음
- 변수가 위치하는 곳을 ‘주소’라고 하며, 변수의 주소를 알기 위해서는 변수 앞에 ’&‘를 붙임
- a의 주소 = &a
정수형 배열의 메모리 할당
- 배열로 선언하면 변수가 메모리에 순서대로 들어감
int a[3] = {1, 2, 3};
-
위처럼 선언하고, a[0]의 주소 (&a[0])가 1031번지라고 가정할 때, a[1]의 주소는 1031 + int는 4바이트 ⇒ 1035번지
-
배열 a의 주소를 구할 때에는 &를 쓰지 않고 그냥 a라고 함. a = &a[0]
포인터
- 포인터는 주소를 담는 변수
- 포인터 선언을 위해서는 *를 붙임
- 포인터 변수 p에는 변수의 주소가 들어감
- 포인터 변수의 크기는 시스템에 따라 달라짐. (32비트에서는 4바이트, 64비트에서는 8바이트)
char ch = 'A';
char* p = &ch;
이때, p는 ch 변수가 존재하는 주소임
배열과 포인터의 관계
char s[4] = "abcd";
char *p = s;
printf("&s[1] = %s\n", &s[1]); // bcd
printf("p+1 = %s\n", p+1); // bcd
printf("s[1] = %s\n", s[1]); // b
printf("*(p+1) = %s\n", *(p+1)); // b
배열에 접근할 때, 포인터를 사용해서 접근할 수 있음
아래는 공부할 때 적은 내용