메뉴 닫기

정보처리기사 – C 언어 포인터 공식 2편

안녕하세욥~

오늘은 저번에 배운 1편에 이어 나머지 공식들을 알아보겠습니다~

1편과 마찬가지로 실무나 원리를 설명하는 글이 아니라, 자격증 시험 문제를 풀때 더 빠르고 정확하게 풀기 위한 공식과 풀이 방법을 정리한 글입니다. 참고하셔서 공부하시면 좋겠습니다~

1편 바로가기 링크

 


구조체 포인터

구조체 포인터는 . 이 아닌 ->

일반 구조체를 사용할 경우 아래 이미지 처럼 . 을 사용합니다 (ex: book.price)

구조체 포인터를 사용할 경우 아래 이미지 처럼 ->를 사용합니다. (ex:book->price)

ptr->member == (*ptr).member

*ptr 에 괄호를 쓰는 이유는 *ptr.member 로 사용하면 컴파일러가 *(ptr.member) 로 해석하기 때문입니다.

. 연산자가 * 보다 우선순위가 높기 때문에 괄호를 사용해야 합니다.

번외 – 함정 모음

포인터 공식은 아니지만, 정보처리기사에서 주의할만한 함정 모음입니다.

 

\0 == 문자열의 끝 (Null 문자)

C 언어의 문자열은 반드시 \0 (null) 로 끝납니다. 메모리 상에서도 \0 을 포함합니다. 

sizeof 는 배열 전체의 크기를 구하기 때문에 \0까지 포함됩니다.

 

array == &array[0] 
array++  == 불가 
p++ 가능

배열의 이름은 고정된 주소이므로 이동할 수 없고, 포인터 변수는 주소를 저장하는 변수이므로 이동할수 있습니다. 

아래 이미지 처럼 array++ 을 사용하게 될 경우 오류가 뜨게 됩니다. 

strcmp(“ABC”, “ABC”) == 0

strcmp 는 두 문자열이 같은지뿐만 아니라 어느 문자열이 더 앞에 있는지 비교하는 함수 입니다.

두 문자열이 같을 경우 0, 첫번째 문자열이 더 작을 경우 음수, 첫번째 문자열이 더 크면 양수를 반환합니다.

문자열이 큰지 작은지를 나타내는 것은 아스키 코드로 판단합니다. 시험에서 아스키 코드를 활용한 문제가 자주 출제되므로, 대략적인 범위를 알아두시는 것을 추천드립니다~

[아스키코드 범위]

대문자 : A(65) ~ Z(90)

소문자 : a(97) ~ z(122)

숫자문자 : 0(48) ~ 9(57)

 


 

예시 이미지의 경우 1편과 마찬가지로 MyCompiler C 컴파일러를 이용하여 작성하였습니다~

모두 좋은 결과 있으시길 바라며, 이 글이 조금이라도 도움이 되었으면 하는 바램입니다~

제 글을 읽어주셔서 감사합니다. 모든 분들 화이팅!! 좋은 하루 되세요~!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다