inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

정렬 스페셜 - 합병정렬

C언어에서 포인터, 배열, 문자연산

해결된 질문

61

김영서

작성한 질문수 7

0

안녕하세요 선생님

항상 강의 잘 듣고 있습니다.

 

문제를 푸는 중에 궁금했던 건데요.
이런 코드에서 어떨 때는 배열 내 위치를 하나 더 움직이고 어떨 때는 ASCII 코드의 그 다음 알파벳을 뱉는데 이게 너무 헷갈립니다..ㅠ

주소에서 연산을 하는 거면 배열에서 위치를 옮기고
값에서 연산을 하는거면 ASCII코드에서 다음 알파벳을 뱉으면 되는건가요..?

주석에 제가 이해하는 법을 적어놨는데 이렇게 이해하면 되는걸까요?

특히,
printf("%s", a+2); 이런 부분 같은 경우에는
a+2에서 a는 시작주소를 뜻하니 a[0], 따라서 a[0]+2 --> a[0]은 값이니 h, h라는 값에서+2하니까 j
이런 사고 과정으로도 흘러가는 거 같아 헷갈립니다..ㅠㅠ

답변 주시면 감사하겠습니다!

# include <stdio.h>
int main() {   
    char a[6] = "hello";
    printf("%s", a+2); // a는 시작주소(=a[0])를 뜻하니 a[0]의 주소에서 2번 옮김? -> llo
    printf("%c", a[1]+2); //a[1]은 값으로 e를 뱉으니 ASCII? -> g
    printf("%c", *a+1); // *a는 a[0]의 값 h를 뱉으니 ASCII? -> i
    printf("%c", *(a+1)); //(a+1)은 a[0]에서 하나를 더 움직인 주소 ->의 값 = e
    printf("%c", a[1]); // a[1] = e
    return 0;
}

출력값 : llogiee

python java c 정보처리기사

답변 2

0

주말코딩

안녕하세요, 볼드체로 질문 주신 것 자체는 맞습니다.

 

포인터가 움직이면 배열에서 앞이나 뒤의 메모리 주소로 가는 것이고,

값 자체가 플러스 마이너스인 경우에는 코드값이 바뀌겠죠.

 

아스키코드라는 것은 그냥 허상입니다.

원래 컴퓨터는 다 이진수를 사용하죠.

그 이진수를 문자로 출력하면 문자인거고 숫자이면 숫자로 나오는 것 뿐입니다. (%c, %d)

그것에 맵핑되어 있는 코드를 아스키코드라고 부르는 것 뿐입니다.

 

주신 코드 자체는 모두 맞습니다.

생각하신 방향 주석도 맞고요.

 

조금만 더 공부할 수 있다면,

지금은 단순히 실제 주소에 +1만 하셨는데

아예 증감연산자(++, --)가 붙은 코드를 학습하시는 것이 좋습니다.

 

그리고 실제 시험은 증감연산자로 나옵니다.

 

증감연산자는 아예 그 자체에 반영해버리기 때문에 이전 것을 기억하면서 출력해야 합니다.

생각하신 방향과 개념은 모두 맞습니다.

 

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 김영서님.

C 언어에서 포인터, 배열, 및 ASCII 코드와 관련된 연산은 처음에는 헷갈리기 쉬울 수 있습니다. 궁금하신 부분에 대한 설명을 드리고, 코드에 대한 이해를 도와드리겠습니다.

  1. printf("%s", a+2);

    • 여기서 a는 배열의 시작 주소를 나타냅니다. 따라서 a+2는 배열의 시작 주소에서 두 칸 뒤를 가리키게 됩니다. 이는 문자열 상에서 세 번째 글자 ‘l’을 시작으로 llo가 출력됩니다.
  2. printf("%c", a[1]+2);

    • a[1]은 배열의 두 번째 요소로, 문자 ‘e’를 가리킵니다. a[1]+2는 ASCII 코드 ‘e’(101)에 2를 더하여 103, 즉 문자 ‘g’가 됩니다.
  3. printf("%c", *a+1);

    • *a는 포인터 연산자로 a[0]의 값, 즉 ‘h’를 의미합니다. ASCII 코드로 1을 추가하면 105로, 이는 문자 ‘i’를 나타냅니다.
  4. printf("%c", *(a+1));

    • (a+1)은 배열의 두 번째 요소를 가리키는 주소를 의미하며, 거기에는 ‘e’가 저장되어 있습니다.
  5. printf("%c", a[1]);

    • a[1] 자체는 배열의 두 번째 요소인 문자 ‘e’입니다.

요약하면, 주소에 연산을 수행할 때는 배열 내에서 위치를 이동하며, 에 연산을 수행할 때는 ASCII 코드 연산이 이루어집니다. 그리고 지금 혼동되시는 부분은, a+ 연산이 배열의 포인터이기 때문에 주소를 이동시키는 행위이고, *a 또는 a[n]처럼 값을 가져오는 연산은 ASCII 값을 기반으로 합니다.

인프런 강의에서 탐색 가능한 관련된 답변을 찾았으니, 도움이 되실 것입니다:

이 질문들에서는 포인터와 배열, ASCII 연산에 대해 다양한 사례와 설명이 제공됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

50

2

26년 1회 실기 해설 강의

0

67

2

53번 4-1 자료 오류 있는 것 같습니다.

0

73

2

7번문제

0

60

2

C언어 변형문제 9번문제 Pdf 수정요청

0

48

2

메서드 오버드라드

0

51

2

실수

0

46

1

공부 우선순위 우선강의 알려주세요

0

90

1

생성자 호출순서 강의 10번 문제 30분대 질문입니다

0

49

2

25년 2회 기출 5:40 질문입니다.

0

43

2

모의고사1회 3번 파이썬문제

0

75

2

C언어 출제변형 6번 문제

0

50

2

c언어 출제변형 강의 질문

0

32

2

28:40

0

33

2

C :  언어 배열과  문자열 수업자료

0

31

2

파이썬 리스트, 딕셔너리 질문

0

43

2

모의고사 관련 질문 건

1

69

3

자료 내용 오류

0

64

2

정적 변수, 정적 메서드(static) v2

0

51

2

v1.2 와 v0.91 PDF

0

104

1

업캐스팅 (부모형태, 자식생성자)

0

51

2

정보처리산업기사 준비중입니다.

0

74

2

실기 D -6

0

105

2

(기출) 2024년 2회 기출문제 - 이론 포함 22분32초 질문입니다

0

60

3