저도 엄청 초짜 입니다.
문제 풀이 형식으로 답변 드릴게요 ^^;;
밑에 님이 에러 링크 걸어놓으신대에 제가 예전에 답변 으로 갑사하다는게 보여서 순간 움찔?; 햇다는 =_=;;;
일단 int 를 2 byte로 취급하거나 4byte로 취급 할수도 있다는건 아시겟죠?
그래서 코드를 보시면 대부분 n=sizeof(list)/sizeof(int);로 해서 배열 갯수를 얻곤 합니다.
b=a 하시고 b를 출력 하시기 위해서는
처음에 b는 포인터 아니겟습니까? 거기서 먼저
2차원 배열을 참조하는 포인터이기 떄문에
2차원 포인터 ** 을 사용 하면 답이 나옵니다.
*(*(b+i)+j) == a[i][j] 랑 같은 거죠.
즉 * 을 한개만 붙이면 주소를 가리키게 되기 떄문에
%d를 해도 주소가 나온단 이말이죠.
그 주소에서 *를 한번더 참조하면 원 데이터가 있는 곳을 참조 하게 됩니다.
저도 정말 초짜인데 제 짧은 지식으로나마 조그만한 도음이 되었으면 기쁘겟습니다.
짧은 이견이지만..
어셈플리를 공부하신다고 하셔서 나쁜짓은 아니잖아요?ㅎ
열심히 하셔서 멋진 프로그램 하나 작성 해보시는 것도 경험 아닐까 생각 합니다.
저는 고등학교때 어셈플리어로 화면에 무름표 색깔별로 찍엇어요 =_=;;;
좌표 노가다신공으로 ;;; ㅎㅎ ^^;; 화이팅 입니다.
0x000 님이 쓰신 글 :
: 제가 요즘 들어 어셈블리를 배우면서
: "아.. 지금 내가 배우는 이 것이 과연 미래에 도움이 될까?"
: 하는 생각을 하게 되었습니다.
: 제가 현재 어셈블리에 지름신 강림하듯 투자했습니다.(한꺼번에 산 건 아닌데 너무 비싸..)
: 심지어 영문서적까지 사버렸습니다.(다행인건 어느정도 알아듣는다는 것)
: 그래서 더 걱정됩니다. -_-;;
:
: 용기를 북돋아달라는 것은 아닙니다.
: 제가 지금 하는 이 짓(?)이 과연 올바른 행동인지, 과연 미래에 도움이 될지
: 그것만 자세히좀 알려주시면 감사하겠습니다.
:
: 아 그리고 간단한 질문..
:
: int a[3][2]={{1,2},{10,20},{100,200}}
: int (*b)[2];
: b=a;
:
: 대략 이런 설정이 되어있고
:
: printf("%#010x %#010x \n", )
: printf("%#010x %#010x \n", )
: printf("%#010x %#010x \n", )
:
: 대략 이런 걸 출력했더니 책에서의 결과는
:
: 0x8047d10 0x8047d10
: 0x8047d18 0x8047d14
: 0x8047d20 0x8047d18
:
: 그러나 우리집에서의 결과는
: 0x0000ffd0 0x0000ffd0
: 0x0000ffd4 0x0000ffd2
: 0x0000ffd8 0x0000ffd4
:
: 이렇게 나왔습니다.
: 저는 당연히 서로의 주소의 차이가 같을거라 생각했는데
: 책에서는 4, 8정도 차이가 났고 우리집에서는 2, 4정도 차이가 나더군요.
: "별로 상관 없겠지"라고 생각했는데 은근히 궁금한 게.. -_-
:
: 아 그리고
:
: int a[3][2]={{1,2},{10,20},{100,200}}
: int (*b)[2];
: b=a;
:
: 아까랑 같이 이런 설정이 되어있을 때
: b, b+1, b+2의 결과를 볼 순 없을까요?
: printf("%d\n", b+1); 했는데 이상한 결과가 나오네요.
: &도 붙여보고 *도 붙여보고 별 짓을 다 해봐도 안 나오더군요.
:
: 쓰여진 프로그램은 Turbo C 2.01입니다.
:
: 쓰다 보니 배보다 배꼽이 더 커버렸네요.
|