inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

정렬 스페셜 - 합병정렬

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

해결된 질문

70

김영서

작성한 질문수 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 연산에 대해 다양한 사례와 설명이 제공됩니다.

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

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

26년2회 실기기출은 언제쯤...

0

47

2

이론 공부법 요약본 버전 업데이트 문의

0

35

2

정처기 필기 준비할때 이 이론을 다시 외워도 될까요?

0

57

2

조건 반복문 질문: for 문 ?

0

66

1

정처기 26-2회. 9번 질문드립니다!

0

85

1

이론 보면서 질문이 있습니다.

0

82

2

정보처리기사 실기 26년 2회 SRT 스케줄링 문제 단위 질문

0

93

2

유튜브(정보처리기사 실기 | 26년 2회 기출문제 코드 해설)

0

153

2

262 정처기 실기 C언어코딩

0

50

1

정보처리기사 262 실기 Hash(해시) 질문

0

85

2

static 변수 질문입니다.

0

65

2

파이썬 4강 질문입니다.

0

73

2

모의고사 1회 3번문제

0

95

3

41강 30:10

0

69

2

이론 공부법 질문 있습니다.

0

95

2

부모의 생성자 관련 질문

0

70

2

시험지 문제에 필기해도 되나요?

0

92

3

41강 11:23

0

61

2

4강파이썬 질문입니다

0

58

2

try-catch 핸들러명

0

71

2

36강 3:48

0

70

2

35강 18:27

0

69

2

자식 코드 내 super() 생략

0

63

2

출력질문

0

81

2