변수값바꾸기 ..이상하네요.

zxcvbnm의 이미지

이게 왜 안바뀌죠..

#include <stdio.h>

void revertvalue(int *i, int *j)
{
int *tmp;
tmp=i;
i=j;
j=tmp;
}

void main()
{
int i,j;
i=10;
j=20;
printf("before i=%d , j=%d\n", i, j);
revertvalue(&i,&j);
printf("after i=%d , j=%d\n", i, j);

}

결과
before i=10 , j=20
after i=10 , j=20

최병현의 이미지

사소한 실수를 하신 것으로 보입니다.

zxcvbnm wrote:
void revertvalue(int *i, int *j)
{
        int *tmp;
        tmp=i;
        i=j;
        j=tmp;
}

다음과 같이 수정하시면 원하시는 대로 될 것 같습니다.

void revertvalue(int *i, int *j)
{
        int *tmp;
        *tmp=*i;
        *i=*j;
        *j=*tmp;
}

이렇게 하셔도 될 것 같구요

void revertvalue(int *i, int *j)
{
        int tmp;
        tmp=*i;
        *i=*j;
        *j=tmp;
}

그런데 원하시는 것이 변수의 주소를 바꿔치기 하여 값이 바뀐 것처럼 보이도록하는 것이라면 revertvalue()의 선언은 원래 사용하시던 것이 맞고 main()내 i, j에 대한 선언이 달라져야 할 것입니다.

To be a rich

icristi의 이미지

void main() 
{ 
int i,j; 
i=10; 
j=20; 
printf("before i=%d , j=%d\n", i, j); 
revertvalue(&i,&j); 
printf("after i=%d , j=%d\n", i, j); 

} 

miain에 선언한 처음의 int 형의 두 변수는 지역변수 이므로 콜바이 레퍼런스로 전달하였다 하여도 외부에서 포인터 자제를 바뀔 수 없을 것입니다.

void main() 
{ 
int* i = (int*)malloc(1); 
int* j = (int*)malloc(1); 
*i=10; 
*j=20; 
printf("before i=%d , j=%d\n", *i, *j); 
revertvalue(i,j); 
printf("after i=%d , j=%d\n", *i, *j); 
} 

코드를 이렇게 바꾼다면 님이 의도한 데로 잘 될것입니다.(테스트는 안해봤어용~)

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

오.. 이거 테스트 해보니까 제가 잠시 착각했다는 걸 깨달았습니다.
이렇게 해봤자 어차피 retvertValue() 에서는 포인터 스왑 자체가 지역변수놀이가
되어버려서 바뀐게 적용이 안되는 거네요.
실수!~

위의 코드는 잘못된 코드 입니다.

dhjung의 이미지

최병현 wrote:
다음과 같이 수정하시면 원하시는 대로 될 것 같습니다.
void revertvalue(int *i, int *j)
{
        int *tmp;
        *tmp=*i;
        *i=*j;
        *j=*tmp;
}

위의 코드는 잘못됐습니다.. 사용하지 마시길..

최병현 wrote:

이렇게 하셔도 될 것 같구요
void revertvalue(int *i, int *j) 
{ 
        int tmp; 
        tmp=*i; 
        *i=*j; 
        *j=tmp; 
}


위 처럼만 사용하시길...


--------------------------
Donghyun Jung

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.