
포인터와 배열
포인터
C언어에서 포인터는 다른 변수의 메모리 주소를 저장하는 변수이다.
• 선언 : int *ptr;은 정수의 주소를 저장하는 포인터 ptr을 선언하는 것이다.
• 초기화 : ptr = &var;은 var 변수의 주소를 ptr 포인터에 할당한다.
• 역참조 : *ptr은 ptr에 저장된 주소의 값에 액세스한다.
배열
C 언어에서 배열은 동일한 데이터 타입의 요소들을 연속된 메모리 위치에 저장하는 자료구조이다.
• 선언 : int arr[5]; 는 5개의 정수를 담는 배열을 선언한다. • 초기화 : int arr[5] = {1, 2, 3, 4, 5}; 는 배열을 중괄호 안에 있는 특정 값들로 초기화한다. • 요소 접근 : 인덱스를 사용하여 배열 요소에 접근한다.
예: arr[0] 는 첫 번째 요소를 접근한다.
배열과 포인터
C에서 배열 이름(예: arr)은 실제로 배열의 첫 번째 요소에 대한 포인터이다.
즉, 포인터가 필요한 표현식에서 배열 이름을 사용하면 배열의 첫 번째 요소에 대한 포인터로 변환된다.
일차원 배열과 포인터
*q => str[0] **q => 해당 문자열의 첫번쨰 글자 ((q+2) + 2)); => str[2]의 인덱스 2인 곳

이차원 배열과 포인터
((p + i) + j)는 i 행과 j 열의 요소 *(p + 0)는 p[0]의 첫번쨰 원소 (p + 1)는 p[1]의 첫번째 원소
주의할 점 : 역참조와 일반 덧셈이 섞여있으면 헷갈릴 수 있으니 괄호를 잘 봐야한다.
ex. (p+1)이랑 p+1은 다른 것이니까 연산할 때 헷갈리지 않도록 한다.

C언어 포인터 기출문제
24년 2회 정보처리기사에서 아래와 같은 문제가 출제되었다.
저작권 때문에 일부는 변경하였다.
이 코드에서 str1은 "hello"로, str2는 "example"로 초기화되었다. copyString 함수가 호출되면 str2는 str1의 내용으로 덮어쓰여지게 된다. 이후 str2의 각 문자에 해당하는 ASCII값의 합을 result에 저장하고 이를 출력한다.
이 부분이 중요하다.
*src는 포인터 src가 가리키는 원본 문자열에서 문자를 가져온다. src가 가리키는 위치의 값을 dest가 가리키는 위치에 복사한다.
copyString 함수에서는 값(문자)을 복사하여 원본 문자열에서 대상 문자열로 복사하며, 포인터 주소는 단지 문자열의 다음 문자로 이동하는 데 사용된다.
• 포인터 변수를 직접 할당하면 위치(주소) 복사 • 포인터가 가리키는 값을 할당하면 값 복사
그런데 이게 실제 시험에서는 함수명이 copyString이라고 노골적으로 기능을 알려주게끔 출제되지 않을 것이다.
실제로 함수명이 저것과 다르게 나왔다.

위 내용을 모르면 정보처리기사 시험에서 불합격하게 되므로 잘 알아두어야 한다.
