void 포인터 return 질문

void * 형 을 받아오고 리턴하는 함수를 만들었습니다.

dest 포인터 가 가리키는 배열의 주소를 result 에 담아서
result 로 포인터 연산을 하며 문자를 넣는 내용입니다.

어차피 result, dest 둘다 같은 것을 가리키는데 result 를 return 할떄랑 dest 를 리턴할때 결과가 다른데 이유를 모르겠습니다.

(옮기는 과정에서 오타가 있을 수 있습니다…ㅠㅠ)

#include <string.h>
#include <stdio.h>

void *  func1(void *dest, int c, unsigned int len)

{

    unsigned char *result;

    result = dest;

    while(len--)

        *(result++) = (unsigned char)c;

    return (dest);
    // return (result);

}

int main(void)
{
	char arry2[20];

	for (int i = 0; i < 20; i++)
		printf("func1\t%d\t:\t%s\n", i, (char*)ft_memst(arry2, 65, sizeof(char) * i));
    return (0);
}

result를 변하게 하는 연산이 있네요.

1 Like

result 를 변하게 하면 dest 도 같이 변하는거 아닌가요…? 둘다 같은 걸 가리키니까

무슨소리에요…
그렇지 않습니다.

참조와 변수에 대해 다시 이해하실필요가 있어요.
int a = 3;
int b = a;
b++;

하면 a의 값도 바뀌나요??

포인터도 변수의 일종이며, 단지 주소값을 저장하는 변수형입니다.

같이변한다는것은

int a = 3;
int *b = &a;
int *c = &a;

a++;
햇을때 b,c가 가리키는 주소가 같으니 어떤 포인터변수로 참조하더라도
같은 결과인 a가 나오는거죠.

위의 사례랑 다르죠?
꼭 구분하셔야하는 개념입니다.

3 Likes

*(result + (++i)) = (unsigned char)c;

위 와같이 수정했습니다.

result++ 로 하지않고 따로 변수를 줘서 i = 0 주고 포인터 연산을 하니까

dest 랑 똑같네요. 음… 뭐지

네???

2 Likes

포인터는 ‘메모리 주소를 저장히는 변수’ 입니다.
이 말의 의미를 곱씹으며 윗 분의 답변을 보면 이해가 가실꺼에요

1 Like

함수에 인자로 넘겨준 포인터와 그 인자는 같을까요 다를까요?

1 Like

답변 많이 남겨주셔서 도움이 많이 되었습니다. 감사합니다.ㅠㅠ

1 Like