C언어 포인터 자꾸 햇갈리네요.

nexusz99의 이미지

휴..아무리 공부를 해도 햇갈리는 포인터 어찌해야될지 모르겠네요..

일반적인 포인터는 이해가 갔는데

막..함수포인터.. 구조체 포인터.. 이중포인터 등등 조금만 복잡해 지면 머리가 따라가 지지 않네요.ㅠㅠ

아..ㅠ 이를 어찌해야하나요.ㅠ

phonon의 이미지

전체를 이해하실 필요는 없습니다.
어셈블리 책이나 강좌의 앞부분만 보시면 도움이 되실 겁니다.

ipes4579의 이미지

Quote:
Submitted by phonon on 월, 2009/06/08 - 11:23am.
1
point
전체를 이해하실 필요는 없습니다.
어셈블리 책이나 강좌의 앞부분만 보시면 도움이 되실 겁니다.

어셈블리 책도 좋고, C언어에서 메모리가 어떤 식으로 잡히나 강좌를 통해 그 구조만 이해하셔도 금방 이해하실 수 있을 거예요.
재밌는 문제 하나를 내볼까요? 배열 배우셨죠? 그럼

printf("%d", 100[a]);

가 무엇을 뜻하는 지 아시겠어요?

이거 아시면 어느정도 포인터 이해하신건데 ^-^ㅎ

nexusz99의 이미지

음..
#include

void main()
{
int a[100]={0,};
printf("%d\n",99[a]);
printf("%d\n",100[a]);
}

로 해봤더니

0
1245120

이렇게 뜨네요..

a의 시작점으로부터 앞에 정의한 숫자만큼 떨어진 곳의 메모리값을 읽어들이는거군요
----------------------
뻘짓도 일이다.

뻘짓도 일이다.

나빌레라의 이미지

모두가 알고 있는 사실이지만, 참고로 말씀드릴께요

C 언어에서

포인터 변수에 대해 ptr[n]연산은 *(ptr + n)으로 바뀝니다.

그래서

99[a]는 *(99 + a) 가 됩니다.
a[99]는 *(a + 99) 죠.

덧셈의 교환법칙에 의해 저 둘은 같습니다.

[] 연산은 배열과 포인터에 대해 둘다 잘 동작합니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

phonon의 이미지

나빌레라님 C언어의 난해함(자유로움)를 미리 알려 주시면 어떠지 하옵니까.
스스로 책으로 공부하시면 여기에 질문해서 얻는 패스트 푸드보다
시간이 걸리지만 몸과 마음에 이로운 슬로우 푸드를 드시는 겁니다.
원하는 부분뿐만 아니라 주변의 지식도 얻으실 수 있습니다.

아무쪼록 천천히 꼭꼭 씹어서 몸과 마음에 영양분이 되기를 바랍니다.
조금은 마음의 여유가지면서 하시길.

tomahawk28의 이미지

모두가 다 알고있다고 하셨는데..
저 지금 충격 먹었습니다 -_-;


Do you hear the people sing?

freestyle의 이미지

단, 소개팅 해주시면 -_-;

1단계 : 기존의 코드를 그림으로 표현하는 방법
2단계 : 그림을 코드로 옮기는 방법
3단계 : 원하는 내용을 그림으로 표현해 코드로 옮기는 방법
-> 최종적으로 원하는 내용을 코드로 나타내는 방법

이렇게 순차적으로...
--------------------------------
Go to the U-City

----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------

Fe.head의 이미지

일반적인 포인터 한개만 알고 계시면 됩니다. (이중 포인터, 함수포인터는 그냥 그런게 있다라고만 생각하세요)

int * pA;

struct 포인터는 아래 같은 형식일텐데.

struct st_test{
 int a;
 int b;
};
 
struct st_test * pB;

이것을 이해하는것도

(struct st_test) == (int) 라고 생각하시고 이해 하시면 됩니다.
 
(struct st_test) * pB;
 
== (int) * pB;
 
== int * pB;

모든 포인터를 그냥 int * 로 이해하시는것이 속 편합니다

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐? 그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
-----------------------
내가 쓰는 글은 틀릴 수 있습니다.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"