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

배열에 접근할 때, 포인터를 사용해서 접근할 수 있음

아래는 공부할 때 적은 내용