참조자와 함수의 호출관계가 헷갈려서 나름대로 정리해본다.


#include <iostream>

using namespace std;


void Swap(int* &a, int* &b)

{

int temp = a;

a = b;

b = temp;


}


int main(void)

{

int a=10, b=20;

int *ptr1=&a;

int *ptr2=&b;


cout << ptr1 << " [before] " << ptr2 << endl;

cout << *ptr1 << " [before] " << *ptr2 << endl;

Swap(ptr1, ptr2); //인자 넘겨줄 때 헷갈려int* &a는 int 형 포인터 변수의 별명을 선언하는 형태!

cout << ptr1 << " [after] " << ptr2 << endl;

cout << *ptr1 << " [after] " << *ptr2 << endl;

return 0;

}


/*

void Swap(int &a, int &b)

{

int temp = a;

a = b;

b = temp;


}


int main(void)

{

int a=10, b=20;

int *ptr1=&a;

int *ptr2=&b;


cout << ptr1 << " [before] " << ptr2 << endl;

cout << *ptr1 << " [before] " << *ptr2 << endl;

Swap(*ptr1, *ptr2); //인자 넘겨줄 때 헷갈려 : int &a int 형 변수의 별명을 선언하는 형태!

cout << ptr1 << " [after] " << ptr2 << endl;

cout << *ptr1 << " [after] " << *ptr2 << endl;

return 0;

}

*/



#include <iostream>

using namespace std;


typedef struct xy_point

{

int xpos;

int ypos;

}Point;


Point& adder(const Point &p1, const Point &p2) //int &p1이라고 생각하면 int 형 변수의 별명을 선언하는 형태!

{

Point *sum = new Point;

sum->xpos = p1.xpos + p2.xpos;

sum->ypos = p1.ypos + p2.ypos;


return *sum; //위와 같은 맥락으로 Point& *sum

}


int main(void)

{

Point *num1 = new Point;

Point *num2 = new Point;


num1->xpos=10;

num1->ypos=20;


num2->xpos=20;

num2->ypos=100;


cout << adder(*num1, *num2).xpos << endl; //그래서 이렇게 넘겨준다. Point 형 변수 값으로!

cout << adder(*num1, *num2).ypos << endl;


delete num1;

delete num2;


return 0;

}


new & delete 기본 사용법


아래 링크의 malloc & free 기본 사용법과 비교해도 좋다.

http://softs.tistory.com/74


#include <iostream>

#include <string.h>

using namespace std;


char *arr_char(int len)

{

//char *str=(char*)malloc(sizeof(char)*len);

char *str = new char[len];

return str;

}


int *arr_int(int len)

{

//int *arr=(int*)malloc(sizeof(int)*len);

int *arr = new int[len];

return arr;

}


int main(void)

{

char *str=arr_char(20);

int *arr=arr_int(2);


strcpy(str, "Hello Malloc!");

cout << str << endl;

arr[0] = 1;

arr[1] = 2;

cout << arr[0] << endl << arr[1] << endl;


delete []str; // free(str);

delete []arr; // free(arr);

return 0;



const 포인터와 const 참조자


자칫 잘 못 생각하면 헷갈릴 수 있음.


#include <iostream>

using namespace std;


int main(void)

{

const int num=20;

const int* ptr=&num;

const int& ref=*ptr;// int& ref=num;와 같다.

const int* (&ref2)=ptr;// ref2는 포인터 변수 ptr의 별명


    cout << "num : "<< num << endl;

cout << "*ptr : "<< *ptr << endl;

cout << "ref : "<< ref << endl;

cout << "*ref2 : "<< *ref2 << endl<<endl;


cout << "&num : "<< &num << endl;

cout << "ptr : "<< ptr << endl;

cout << "&ref : "<< &ref << endl;

cout << "ref2 : "<< ref2 << endl<<endl;


cout << "&ptr : "<< &ptr << endl;

cout << "&ref : "<< &ref << endl;

cout << "&ref2 : "<< &ref2 << endl;

}




+ Recent posts