C에서 배열은 길이가 컴파일 타임에 알 수 있어도 어쨌든 포인터로 다루게 된다.

때문에 함수 같은 데서 pass by address로 이리저리 구르다가 원치 않은 부작용을 겪거나 메모리 소유권과 관련해 귀찮은 일이 생길 수 있다.



7fe98077b68307f43fef80e5459f343372f88ce663a3b9e516a160

이런 함수가 있다고 할 때  str은 char의 포인터를 받으므로 foo에서 str을 변경하면 외부의 변수도 함께 변하는 부작용이 생긴다.

또 str을 수정해서 char*를 반환하려고 한다면 원본을 훼손하거나 동적 할당을 해야 하는데 이는 메모리 관리가 힘들어진다.



7fe98077b68307f43fef80e4459f343359a2bc8c4ec67e4a7273c2d4

이를 해결하기 위해 비교적 작은 크기의 배열을 구조체에 감싸 전하면 pass by value로 받는 것과 유사한 효과를 볼 수 있다.

함수 내부에서 str을 변경해도 외부에는 영향을 미치지 않고 str를 수정해 반환하더라도 메모리 관리를 신경쓰지 않을 수 있다.