해결된 질문
작성
·
71
·
수정됨
0
11:57 쯤 나와있는 예제 에서
char lower = ‘a' 는
a라는 문자를 문자형태로 lower에 입력한다 로 이해했습니다.
char upper = (char)(lower -32) 는
lower-32의 문자값을 upper에 입력한다. 로 이해했습니다.
lower-32에서 왜 lower은 숫자 97로 대입해서 괄호를 풀어야 하나요? 위에서 a로 입력된 게 아닌가요?
(char) 과 같이 괄호를 써주는 이유가 뭔가요? char upper와 같이 띄어쓰기로 구분을 안해주는 건가요?
17:25 예제 관련하여
printf("%s\n“, p+1) 질문입니다.
문장을 출력할땐 널값을 만날때까지 출력이므로 KOREA 로 나오는건 이해가 갑니다.
p+1의 경우 어떻게해석해야하나요. ? 문장의 시작점을 한칸뒤로가서 잡고 출력하라..로 이해해야하나요?
아직 선언, 변수 등 표현이 익숙치않아 질문에서 사용한 표현이 강사님께서 사용한 표현과 다를 수 있습니다...양해 부탁드립니다.
답변 2
0
안녕하세요.
1. 아스키코드는 정체가 숫자입니다. 우리가 문자로 보고 있는 것은 97이라는 숫자를 문자로 출력하라고 하면, 컴퓨터는 그것을 인간이 미리 입력해놓은 문자를 보여주기만 하는 것입니다. 그래서 문자형태를 수식화해서 계산할 때는 그것의 아스키코드를 알아야 합니다. 소문자 a가 97입니다.
char를 꼭 넣지 않아도 됩니다. (타입명)은 타입캐스팅이라고 불리는데, 타입을 다른 것으로 바꿀 때 사용합니다. 지금 입력 받는 upper가 char 형태이고, 아래 출력을 %c로 하기 때문에 (char)를 지워도 정상적으로 동작합니다. 다만 헷갈리게 하고 어렵게 보이기 위해서 추가했습니다. 시험은 그렇게 나올 수 있으니까요.
%s의 정의를 정확하게 아시는 것이 도움이 됩니다. %s는 "지금 내가 가리키고 있는 곳에서 \0 문자 만날 때까지 싹 다 출력할거야" 입니다. p는 지금 배열의 가장 앞인 K 주소를 가리키고 있습니다. p+1은 char 형태만큼의 크기를 뒤로 가라는 뜻입니다.
문자열이라는 것은 C언어에서 문자를 일정한 간격을 떨어뜨려서 일렬로 메모리 공간에 죽 넣은 배열 상태입니다. 지금 K, O, R, E, A는 char 자료형 크기만큼 나란히 서 있는 것입니다.
p+1은 본인이 선언된 타입만큼 다음 메모리로 가게 되어있습니다. 지금 p 포인터는 char 형태이죠.
그래서 다음 공간에 있는 "O"를 가리키게 됩니다.
O부터 \0 문자를 만날 때까지 출력하기 때문에 OREA가 나옵니다.
이해에 도움이 되셨기를 바랍니다.
0
안녕하세요, 인프런 AI 인턴입니다. ghkd1118님.
ASCII 코드와 형변환에 대한 질문을 주셨군요. 비슷한 주제를 다룬 기존 질문과 답변을 찾아보았습니다.
lower-32에서 왜 lower는 숫자 97로 대입해서 괄호를 풀어야 하나요? 위에서 a로 입력된 게 아닌가요?
(char)와 같이 괄호를 써주는 이유가 뭔가요? char upper와 같이 띄어쓰기로 구분을 안해주는 건가요?
(char)
와 같은 형태의 형변환(casting)은 특정 데이터 타입을 원하는 데이터 타입으로 강제로 변환하는 것입니다. 이 변환을 통해 정수 값을 다시 문자로 해석하게 됩니다. 이와 반대로 char upper
는 변수를 선언하는 부분입니다.아래에 유사한 질문과 답변을 다룬 기존 게시물을 참고해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.