*get_addr() = 100; 이런 식으로 사용할 수 있나요?


네, 사용할 수 있습니다. 보통 다른 언어에서는 함수가 오른쪽에 위치하지만,

C언어에서는 함수가 왼쪽에 위치할 수 있으며 매우 자연스러운 코드입니다.

다만, 낯이 설죠.


예를 완성해 보겠습니다.

int number;

int *get_addr( void){

    return &number;
}

int   main  ( int argc, char *argv[])
{
    number      = 0;
    *get_addr() = 100;

     printf( "*get_addr() = %d\n", *get_addr());
     printf( "number      = %d\n", number);

    return 0;
}

실행하면 get_addr()이 반환한 number 주소에 정확히 값이 대입되어 있습니다.


그렇다면 대입문(=)을 기준으로 왼쪽이 먼저 실행될까요? 아니면 오른쪽부터 먼저 실행할까요?

즉, 아래의 코드에서 get_100()이 먼저 호출될까요? 아니면 get_addr()이 먼저 실행될까요?

힌트를 드린다면 C언어에서 대입문도 하나의 연산자입니다. 15등급으로 순위가 매우 낮지요.

int get_100( void){

    printf( "get_100()\n");

    return 100;
}

int *get_addr( void){

    printf( "get_addr()\n");

    return &number;
}

int   main  ( int argc, char *argv[])
{
    *get_addr() = get_100();

     printf( "*get_addr() = %d\n", *get_addr());

    return 0;
}

C언어는 좌에서 우로 실행되는 규칙이 있습니다. 대입문인 '='도 연산자임을 생각한다면

맨 좌측의 get_addr()을 실행하고 get_100()을 실행한 뒤 대입(=)을 실행합니다.