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


