Call by Reference의 정확한 의미를 찾습니다.

appler의 이미지

요즘 다시 C공부를 시작했는데요..

C는 과연 Call by Reference 라는 게 존재하나요?

제가 알기론 포인터로서 레퍼런스의 기능을 비슷하게 구현한것이라고 생각하고요

그 개념이 발전해서

C++에서 Call by Reference로서 비로서 창조 됐다고 알고 있습니다만..

------------------------------------------------------------------

공학적인 의미의 Call by Reference는 무엇이며

C에서 Call by Reference라는 것이 존재하는지 궁금하군요......

도움을 주시길 부탁 드립니다.

jundols의 이미지

C C++ 어셈블리등 언어를 떠나서, Call by Value 와 Call by Reference는 다음과 같은 차이 때문에 구분을 짓습니다.

1. Call By Value는 정말로 데이터의 복사본이 전달됩니다. 때문에 피호출자가 아무리 값을 만지막 거려도 원본 데이터에
영향을 주지 않습니다.

2. Call By Reference는 피호출자가 데이터를 만지작 거리면, 원본 파일의 내용이 변합니다.

어셈블리어로도 자신이 Call By Reference로 짜면, 그렇게 되는것이구요.

Call By Value형식으로 짜면 그렇게 되는 것이지요.

winchild의 이미지

처음에 C를 배울때부터 Call by Value 와 Call by Reference 를 배웠습니다. 제가 C 를 배울당시에는 PASCAL, COBOL, PLI 등밖에 없었습니다. 물론 ASM 은 있어지만...

Call by value 는 값을 넘겨주는것이고 Call by reference 는 저장소의 주소를 넘겨주는것으로 이해하시면 됩니다.

- 겨울아찌 -
winchild@kldp.org

- 겨울아찌 -
winchild@gmail.com

appler의 이미지

왜 Call by Reference에 대한 궁금증이 유발됐냐 면은.....

한 교육 센터에서 배울때

그 분이 자신감에 차셔서

Call by Reference는 C,C++에는 존재 하지 않는다라고 하시더군요.

나중에 알았지만

C++에는 Reference라는 개념이 있어서

Call by Reference라는 개념을 확고히 하였다라고 본것 같고요.

물론 언어의 차이겠지만....

그렇게 따지자면..

하드웨어 부분에 더욱 가까운 C에는 왜 Reference 라는 개념은 적용하지 못하는가 였습니다.

????

이러 한 이유로 제가 글을 올린 것이구요.....

그리고 더 헤깔리는건......

어떤 웹페이지에서 읽은 글 때문입니다.

한번 읽어보시고 얘기좀 해주세욤.

http://www.xevious7.com/278

----------------------------
궁금증으로 가득찬 20후반 -_-;;
탄생은 죽음의 시작에 불과하다.


laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.

klyx의 이미지

C의 경우는 일단 전부 call by value이고, 포인터를 이용해서 call by reference를 흉내낼수 있습니다.
그럼 C++은 어떠냐...하면 이건 사람에 따라서 생각하는게 다른거 같습니다.
&를 이용하여 reference로 전달할수 있으니까 call by reference다 라고 생각하는 사람, &는 컴파일시에 포인터로 변환되어 컴파일되므로 사실상 C의 포인터와 같으므로 이것도 call by value다 라고 생각하는 사람.
아마 교육센터분은 후자와 같은 생각을 하셔서 C++에서 call by reference는 없다고 생각하는 분 같습니다.
더불어 C의 포인터 전달을 그냥 call by reference라고 하는 사람도 본적있습니다.
용어에 너무 집착하지 말고 자신이 지금 하고 있는게 복사된걸 조작하고 있는 건지, 원본 자체를 조작하고 있는건지만 알수 있으면 된다고 생각합니다.

appler의 이미지

흠 그 차이만 두면 되는거였군요.

^^ 저는 미래를 생각하는 편이라.

제가 혹시 이런 점에 대해서 말했다가

낭패를 당할수도 있다고 생각해서

그래서 이렇게 소심하게 그 말하나를 염두해 두었던 것입니다.

답변 감사 드립니다.

----------------------------
궁금증으로 가득찬 20후반 -_-;;
탄생은 죽음의 시작에 불과하다.


laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.

purluno의 이미지

C언어는 call by reference를 언어 문법 요소로 만드는 대신 pointer를 통해서 call by reference를 비롯한 다양한 저수준 처리를 지원하도록 설계된 것입니다. 좀 더 원론적인 것은 위키피디아의 내용이 좋으니 참고하시면 되겠네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.