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 답변
-
전위/후위 증가 연산자는 변경 가능한 lvalue에 대해서만 가능합니다.
++b
는b = b + 1
와 동치입니다.b++
은temp = b; b = b + 1; temp
와 동치입니다. 전위든 후위든 결국b
에 값을 대입하게 됩니다.b
에 값을 대입하기 위해서는 당연히b
는 변수 여야겠지요.(*pa)++
을 보시면*pa
는 100개 원소를 갖는 문자 배열 입니다. 배열은 첫 번째 원소의 주소로도 변환이 되니(*pa)
는a[0]
의 주소 값이 됩니다.주소 값은 변수가 아니기에 대입 연산이 되지 않습니다. 대입 연산이 되지 않기에 전위/후위 증가 연산자를 사용할 수 없습니다.
간단하게 말하면
(1)++
이 되지 않는 이유와 같이(*pa)++
은 허용되지 않습니다.
댓글 입력