[A-Z]
40
2020-06-17 23:34:47
5
398

c언어 포인터 질문 있습니다.


int *max(int* a, int* b)

{

if (*a > * b)

return a;

else

return b;

}

이거랑

int max(int* a, int* b)

{

if (*a > * b)

return a;

else

return b;

}

이거의 정확한 차이에 대해서 궁금합니다

return이 int 이냐 int * 이냐의 차인거는 아는데



만약

int c = 3,b=5;

한뒤 printf("%d",max(&c,&b));

결과 값이 똑같던데


어떤 차이인가요?

0
  • 댓글 5

  • allinux
    1k
    2020-06-17 23:48:29

    포인터는 어떤 변수나 구조체나 등등의 시작 메모리 주소입니다.

    즉 포인터에는 주소가 대입되어야 합니다.

    int c = 3 일때 c의 메모리 주소는 &c 입니다.

    포인터를 잘 학습하고 싶으면 사실 어셈블리어를 접해보는 겁니다.

    어셈블리어가 장황해서 그렇지 어렵지는 않습니다.

    어셈블리어를 어느정도 알고 디버거로 디스어셈블리된 코드를 보면서 디버깅을 해보면 이해가 쉽게 됩니다.  

  • 독거소년
    3k
    2020-06-18 00:17:11

    printf %d는 그냥 그 값이 주소건 뭐건 형태 무관하게 10진수로 뿌립니다.

    리턴 결과는 뭐가됐든 b의 주소니깐요. 이게 int* 형인지 int형인지 상관하지 않는다는

  • Dive_Drink_Develope
    4k
    2020-06-18 11:14:07

    두번째 함수 리턴문이 좀... *a,  *b를 리턴해야하지 않나요.

  • Dive_Drink_Develope
    4k
    2020-06-18 11:18:11 작성 2020-06-18 11:19:02 수정됨

    첫 함수는 큰 변수의 포인터를 반환하고

    두번째 함수는 큰 변수의 값을 리턴하는 걸로 만든것 같은데


    두번째함수에서 포인터를 반환하게 해놨으니

    리턴 문 내부적으로 implicit하게 type 캐스팅(int* - > int)이 되면서 같은값으로 보일듯.

    warning: return makes integer from pointer without a cast [-Wint-conversion]                                                                          
    warning: return makes integer from pointer without a cast [-Wint-conversion]
  • [A-Z]
    40
    2020-06-18 11:43:49

    답변 해주신 모든 분들 감사드립니다^^


  • 로그인을 하시면 댓글 을 등록할 수 있습니다.