뇌 마음 반반저장소

[42]void 함수인데 return 값이 가능하다구? 본문

좌뇌/왕초보의 컴퓨터 언어 세계

[42]void 함수인데 return 값이 가능하다구?

맹진저 2022. 12. 29. 01:07
728x90

위의 함수를 살펴보다가 void함수가 return값을 포함하고 있는 것을 보았다. 그래서 어떻게 void함수가 return값을 줄 수 있는지 궁금해서 찾아봤다.

 

그냥 void는 아얘 텅 빈 값이다. 그래서 libft의 fd 함수들을 만들 때 print를 목적으로 루프를 돌려주고 리턴값이 없는 함수를 아래와 같이 만들었다. 때때로 이렇게 리턴이 필요 없는 간단하고 깔끔한 함수들이 필요하다.

void    ft_putchar_fd(char c, int fd)
{
    write(fd, &c, 1);
}

하지만! void에 포인터를 붙여 준다면 어떻게 될까? 포인터는 자리를 맡아주기 때문에 void*라도 자동적으로 8바이트의 주소를 위한 공간을 설정해 준다. void의 타입 자체도 텅 비어 있기 때문에 아무 타입이나 넣어 줄 수 있다!

그래서 void pointer는 메모리 주소를 가리킬 수 있는 아주 유용한 주소 저장고가 된다. 

 

아래의 예를보자!

#include <stdio.h>

void *void_pointer(char *str)
{
    return((char *)str);
}

int main (void)
{
    char *a;

    a = void_pointer("Hello_world");

    printf("void_pointer : %s\n", a);
    return (0);
}

void 포인터에 리턴값을 주고 a에게 그 주소를 가리키도록 한다. 그러면 결과는?

$ ./a.out
void_pointer : Hello_world

 

728x90
Comments