졸업작품/CallByValue(콜바이 벨류)

CallByValue(콜 바이 벨류)

ElectricShock 2016. 3. 11. 16:53

&, * 연산

연산.txt



#include <stdio.h>


C언어로 포인터의 필요성 설명(콜바이 벨류)


void swap( int val1, int val2)        //swap 메소드 선언

{

        printf("tmp val1=%d , val2=%d \n", val1,val2 );    //tmp val1=10진수 정수, val2=10진수 정수    

        int tmp;

        tmp = val1;                    //tmp, val1, val2가 서로 맞물리면서 교환한다.

        val1 = val2;

        val2 = tmp;

        printf("tmp val1=%d , val2=%d \n", val1,val2 );                    

}


int main(int argc , char * argv[])

{

        int a, b;

        a =1 ;

        b = 2;

        printf("a=%d , b=%d \n", a,b );        //a=1, b=1 확인   


        swap(a,b);

        printf("a=%d , b=%d \n", a,b );                

        return 0;

}


------출력----------------------------------------------------------------------------------

a=1 , b=2                                

tmp val1=1 , val2=2                  

tmp val1=2 , val2=1                    

a=1 , b=2                                


다시 정리하자면

변수가 4개 선언되는데 a,b 그리고 val1, val2

a,b에 가각 1,2를 넣고, 이걸 swap메소드로 갖고와서 연산후에는

swap메소드안의 val1,val2는 증발해버린다.

그럼 결국 원래의 a,b의 1,2값에는 변화가 없다.




===================================================================

콜바이 레퍼런스 (포인터)

#include <stdio.h>

{

        printf("tmp val1=%d , val2=%d \n", *val1,*val2 );            //

        int tmp;

        tmp = *val1;                                        //가리키고있는 변수의 값

        *val1 = *val2;

        *val2 = tmp;

        printf("tmp val1=%d , val2=%d \n", *val1,*val2 );            //

}


int main(int argc , char * argv[])

{

        int a, b;

        a =1 ;

        b = 2;

        printf("a=%d , b=%d \n", a,b );            //


        swap(&a,&b);            //a의 주소값, b의 주소값 

        printf("a=%d , b=%d \n", a,b );            //

        return 0;

}


-------출력---------------------------------------------------------------------------------------------

a=1 , b=2                                //

tmp val1=1 , val2=2                //

tmp val1=2 , val2=1                //

a=2 , b=1//




===================================================================

#include <stdio.h>


int main(int argc , char * argv[])

{

        int *p;

        int a = 2;

        p = &a;

        printf("%p %p \n" , p, &a);

        printf("%d %d \n" , *p, a);

        a =3 ;

        printf("%d %d \n" , *p, a);

        return 0;

}


-------출력-----------------------------------------------------------------------------------

0xbff6b118 0xbff6b118

2 2

3 3