C에서 배열은 길이가 컴파일 타임에 알 수 있어도 어쨌든 포인터로 다루게 된다.
때문에 함수 같은 데서 pass by address로 이리저리 구르다가 원치 않은 부작용을 겪거나 메모리 소유권과 관련해 귀찮은 일이 생길 수 있다.
이런 함수가 있다고 할 때 str은 char의 포인터를 받으므로 foo에서 str을 변경하면 외부의 변수도 함께 변하는 부작용이 생긴다.
또 str을 수정해서 char*를 반환하려고 한다면 원본을 훼손하거나 동적 할당을 해야 하는데 이는 메모리 관리가 힘들어진다.
이를 해결하기 위해 비교적 작은 크기의 배열을 구조체에 감싸 전하면 pass by value로 받는 것과 유사한 효과를 볼 수 있다.
함수 내부에서 str을 변경해도 외부에는 영향을 미치지 않고 str를 수정해 반환하더라도 메모리 관리를 신경쓰지 않을 수 있다.
오우씹 이거 아이디어 좋은데
폰트머인
셈틀체이긴 한데 이거 유료라 돈 아깝다면 JetBrains Mono 찾아보셈
c언어는 모두 pass by value 이지 않나?? - dc App
ㅇㅇ 맞음
첫댓인데 내가 시발 이 소리 나올줄 알고 있었다
변수가 전달되는 방식만 놓고 보면 포인터로 결국 어떤 값이기 때문에 pass by value가 맞는데 배열이나 구조체 같은 걸 함수에서 참조할 수 있도록 주솟값을 넘겨주는 방식이기 때문에 관점에 따라서 pass by address로 보기도 함
*포인터도
c++엔 char 15 wchar 6 bytes인다 small string optimization이 17버전부터 표준에 적용되어있습니댜 - dc App
const char*로 넘기면 되는거 아님??
수정하거나 새로운 문자열을 반환할 게 아니고 읽기만 할 거면 const로도 충분한데 본문에 있는 것처럼 새 문자열을 반환하거나 기타 메모리 관리 측면에서 유용하게 써먹을 수 있음
뭔 소리임? 수정해야 할때 원본 문자열을 받아서 어차피 수정할거면 메모리관리 측면에서도 값복사가 안일어나는게 좋지
아니 원본을 유지하면서 새로운 문자열을 반환하는 경우라고
그니까 새로운 문자열을 반환하면서 원본을 유지하면서 반환하는 경우에 const를 쓴다고 ㅋㅋ 저런 멍청한 짓 안하고
문자열이 배열이라는 특성상 새로운 문자열은 새로운 공간을 할당해줘야 하잖아 근데 쟤는 그게 필요가 없다고
ㄴ냅둬라 빡통대가리새끼들은 지가 모르는거 처음 알게되면 원래 일단 거부감 일으킨다 어차피 지들 인생 꼬이는거
const
c프로그래머가 이딴 짓거리 해대니까 러스트 빨 수밖에 없다. - dc App
으..