블로그 이미지
JoyfulLife

공지사항

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

'c'에 해당되는 글 1

  1. 2010.07.15 포인터

포인터

2010.07.15 23:49 | Posted by JoyfulLife
포인터를 공부 중이다. 포인터 공부할수록 C언어는 포인터라고 생각이 든다.

지금은 포인터를 리턴하는 것을 배우고 있다.


(?) test() (?)
{
static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
return a;
}

int main()
{
printf("%d", (?)test()(?));
}

7을 나오게 해보자.

함수의 리턴형은 더블 포인터인다.

단순하게

int ** test()

로하면 경고가 난다. a에 대한 것을 정확하게 리턴하지 못하기 때문이다.
타입이 일치해야지 경고가 나오지 않는다.

경고가 없이 리턴하는 법을 공부해보자.


타입의 일치가 씨언어에서 중요하다. 이것을 확실하게 알아야 한다.

static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
a+1 = ?
*a+1 =?
**a+1= ?

&a+1 =?

어떻게 계산을 해야 하는가?

저것은 타입을 알아야 풀수 있는 문제이다.

답은
a+1= (a번지 + 16byte);
*a+1=(a번지 + 4byte);
**a+1=2;
&a+1=(a번지 + 48byte);


이것을 푸는 법은 나중에 설명을 하겠다.


그럼 맨 처음 답을 알아보자.

이것은 내가 예전에 배운 것이라 잘 생각이 안난다. 아마 배열을 사용한다면 좀 특별한 규칙이 들어간다.
변수는 선언문과 배열 사이에 존재한다는 규칙이었나?ㅡㅡ;;

아무튼...

정확한 리턴형을 찾아보자.

int ** 라고 생각하는게 일반적이다. 왜냐하면 배열은 포인터이니깐.

아. 다시 생각해보니 헷갈린다.

우선 답은 int (*test())[4] 이다.

이걸 풀어보자면 int(*)[4] test();

이다. 하지만 이것은 문법적인 규칙에 어긋나서 못 쓴다고 들었다. 그 문법에 대한 규칙이 무엇일까 공부를 해봐야 하겠다.


신고

'C언어' 카테고리의 다른 글

교육3일차  (0) 2011.08.25
교육2일차  (0) 2011.08.23
교육1일차  (0) 2011.08.23
포인터  (0) 2010.07.15
이전 1 다음

티스토리 툴바