강좌 & 팁
글 수 2,412
2014.07.31 14:14:47 (*.134.169.166)
50285
*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()을 실행한 뒤 대입(=)을 실행합니다.