변수++와 ++변수의 차이는 인지하고 있는데, for문 결과문에서 ++변수와 변수++ 의 차이가 있음?
아무리 생각해도 큰 차이는 없는 것 같은데, 문장마다 다르게 쓰네. 왜 그렇게 의미 없는 짓을 하는지 이해가 안되어서 물어봄
혹시 개발자들 간의 결과문 규칙이 있으면 알려주면 고마울 것 같음
변수++와 ++변수의 차이는 인지하고 있는데, for문 결과문에서 ++변수와 변수++ 의 차이가 있음?
아무리 생각해도 큰 차이는 없는 것 같은데, 문장마다 다르게 쓰네. 왜 그렇게 의미 없는 짓을 하는지 이해가 안되어서 물어봄
혹시 개발자들 간의 결과문 규칙이 있으면 알려주면 고마울 것 같음
++x == x 랑 x++ == x 찍어봐
오 for문 안 쓰고, 이렇게 간단히 알려주는 방법이 있네
이제 이해하겠네 ㄳ
톨게이트 들어간 후 휴게소에서 화장실 먼저갔다가 핫바를 사든, 핫바를 먹고 화장실을 다녀오든, 톨게이트 나가는 시점에선 똑같음 - dc Cpp
for문 다 끝난 후에 증감식 실행부에서 ++위치가 어디든, 루프 다음회차 실행 시점에선 똑같음 - dc Cpp
그리고 차이에 대해 정확히 인지하고 있다고 말할 수 있나? 후위연산의 경우는 인스트럭션이 두개다. - dc Cpp
인스트럭션이 2개라는 의미는 잘 모르겠으나, cout << x++ << endl; cout<< ++x << endl;이렇게 보면 더하기 전에 출력하는 거하고, 더하고 출력하는 것의 의미는 다르다는 것 정도는 인지함
후위증감의 경우에는 복사본을 하나 만들게됨. 문장이 끝난 뒤에 값이 바뀌어야되거덩... 그래서 사본을 넘겨줌 - dc Cpp
그러니까 x와 x++의 파일을 가지면서, 출력할 땐 x의 파일의 값을 넘기고, x를 x++의 파일의 값으로 넘겨준다는 말이죠?
파일이 뭔말을 하는건진 모르겠지만 x++는 해당 문장이 평가될 때 복사본 x'를 넘기고 그 후엔 x += 1 한다는거지 - dc Cpp
암튼 전위연산은 늘리기만 하는데 후위연산은 복사하는 연산이 하나 더 있다는거임 - dc Cpp
그렇다면 x와x'가 있다면 복사본 x'를 먼저 넘긴 후, 원래 x에 x+=1이 맞나요?
아니면 원본 x를 넘긴 후에 복사본 x'에 x+=1을 적용하나요?
복사본에 +1할 필요가 없지 전자가 맞음 - dc Cpp
함수에 매개변수로 넘기는것도 복사본을 넘기는거임. call by value가 그것이며 값을 복사하므로 원본을 함수에서 변경할 수 없는거임 - dc Cpp
이제 완전히 이해함 ㄳ 그렇다면 포인터 함수에 매개변수를 넘긴다면, 그건 원본을 넘긴다는 의미겠네요?
함수에 포인터 변수?를 넘긴다는 말임
포인터를 매개변수로 받는 함수를 말하는거라면. 결국 뭔가의 주소값을 넘긴다는 뜻이고, 넘긴 주소값도 복사된 주소값이라 해당 변수가 가리키는 주소를 변경할 순 없음 - dc Cpp
그렇지만 역참조 연산자 *를 통해서 "해당 주소에 있는 값에 접근해서 변경해!" 하면 바뀌지ㅇㅇ - dc Cpp
그리고 그 주소값을 변경하고 싶다면? 주소값을 담은 변수의 주소값인 var** param을 넘겨야겠지 - dc Cpp
디포인터를 받는 함수 역시 마찬가지인가요?
아 이제 확실히 이해되었습니다
그건... 디포인터 연산자의 반환값이 뭔지 생각해보자.. - dc Cpp
디포인터가 역참조 연산자이니 같은 의미라고 생각합니다
디포인터 하면 해당 주소에 들어있는 "값"이 나올테고 그럼 그걸 매개변수로 넘기면 int a같은놈 넘기는거랑 다를게 없음 - dc Cpp
*p 넘기는거랑 &a 넘기는건 완전 반대의미지 - dc Cpp
아 첨부터 *을 넣으면 값만 같고, 주소가 다르게 되는 걸 생각하지 못했네요. 그리고, 주소 전달의 경우, 주소는 같으나, 안의 값은 다를 수 있으니, *으로 값도 전달할 수 있도록 하면, 달라진다는 의미 맞나요?
주소 전달의 경우 주소는 같으나 안의 값이 다를 수 있다는게 뭔말임 - dc Cpp
다시 생각해보니, 주소에 있는 변수 값을 번경하면 포인터 전달이라 변하지 않나요.. 머리가 더 꼬이네요
그냥 뭘 전달하든 값을 복사해주므로 함수 내부에서 접근하는 인자는 원본에 영향을 직접적으론 못준다고 생각하면됨 - dc Cpp
예컨대 내가 철수네 집주소를 종이에 적어서 건네줬는데, 그 종이의 내용을 지우개로 지운 후 다시 슨다고 해서 철수가 실제로 사는 집이 바뀌는건 아니잖아. - dc Cpp
하지만 역참조 연산처럼, 종이를 들고 해당 주소로 찾아가서 철수를 줘패서 0으로 만들어버릴 순 있지 - dc Cpp
역참조는 포인터에 접근한 값을 넘기는 거고, 디포인터는 값만 같은 주소를 넘긴다는 의미에서 다른거 같은데 의미를 혼동했네요
역참조가 디포인터임 - dc Cpp
그리고 포인터 전달이든. 비포인터 전달이든, 어차피 복사본을 넘기는 거고, 출력한다면 원본이 아니라 복사본을 출력하는 거겠네요
머리가 더 아프네요,.
포인터 전달, 즉 주소를 전달한거면 그렇고, 함수 내에서 역참조를 통해 해당 주소에 접근해서 값을 받아오는건 원본임 - dc Cpp
ㅎㅎ 천천히 해보셈. 전 빳데리가 읍서서 이만 - dc Cpp
이제 이해 완료함. 제가 한 함수 내부안에서 작동하는거랑 여러함수 안에서 작동하는 거랑 생각하는 면에서 착오가 있었던 듯. int main(){}안에서 디 포인터로 하면 값이 변경되고, 함수를 참조랑 역참조로 전달하고, 출력하면, 원본이 아니라 복사본이 출력된다는 의미네요. 이제 이해했습니다.
최적화
넌 진짜 재능이 없다 그냥 접어라.. .