C언어 이중 포인터에 대한 질문드립니다.

조회수 395회

char형 2차원 배열을 만들고, 이를 가리키는 포인터 또한 만들었습니다. 저는 포인터가 a[0][1]을 가리키게 하고 싶어 (*pa)++을 하였는데 (pa는 a를 가리키는 포인터이고, *pa는 a의 첫번째 행을 가리키는 포인터이고, **pa는 첫번째 행의 첫번째 값을 가리키는 포인터로 알고 있습니다.) 에러가 납니다. 아무리 생각해도 이유를 모르겠습니다 도와주십시오 ㅠㅠ

#include <stdio.h>
int main()
{
        char a[100][100];
        char (*pa)[100];

        pa=a;

        a[0][0]='a';
        a[0][1]='e';
        a[1][0]='g';

        (*pa)++;
        printf("%c\n",*(*pa+1));
}

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    전위/후위 증가 연산자는 변경 가능한 lvalue에 대해서만 가능합니다.

    ++bb = b + 1와 동치입니다. b++temp = b; b = b + 1; temp와 동치입니다. 전위든 후위든 결국 b에 값을 대입하게 됩니다. b에 값을 대입하기 위해서는 당연히 b는 변수 여야겠지요.

    (*pa)++을 보시면 *pa는 100개 원소를 갖는 문자 배열 입니다. 배열은 첫 번째 원소의 주소로도 변환이 되니 (*pa)a[0]의 주소 값이 됩니다.

    주소 값은 변수가 아니기에 대입 연산이 되지 않습니다. 대입 연산이 되지 않기에 전위/후위 증가 연산자를 사용할 수 없습니다.

    간단하게 말하면 (1)++이 되지 않는 이유와 같이 (*pa)++은 허용되지 않습니다.

    • 감사합니다!! 포인터를 공부하다보니 갑자기 헷갈렸던 것 같습니다ㅠㅠ K-osA 2020.8.5 21:06

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)