새로새록

[c++] pass by address(pointer*), reference(&) , value 차이 본문

소프트웨어융합/경희대 c++ 과제

[c++] pass by address(pointer*), reference(&) , value 차이

류지나 2020. 7. 8. 17:49
  pointer, * reference, & value 
null허용 o x o
할당 주소값 대상  

//void함수

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

//main함수

    swap(&var1, &var2);
    std::cout << "var1 = " << var1 << ", var2 = " << var2 << '\n';


//void함수

void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

//main함수

swap(var1, var2);
std::cout << "var1 = " << var1 << ", var2 = " << var2 << '\n';


이해를 돕기 위해 결과값은 같지만 사용법이 다른  swap 1, 2를 구분해보았다.

#include<iostream>
using namespace std;

void swap1(int* a, int* b) {
	int temp = *a;
	*a = *b;
	*b = temp;
}
void swap2(int& a, int& b) {
	int temp = a;
	a = b;
	b = temp;
}
int main() {
	int var1 = 5, var2 = 19;
	swap1(&var1, &var2);
	cout << var1<<endl<<var2 <<endl;

	var1 = 5, var2 = 19;
	swap2(var1, var2);
	cout << var1 << endl << var2;
}

함수에서 이용

#include <iostream>
using namespace std;

int add(int x, int y) {
	return x + y;
}
int multiply(int x, int y) {
	return x * y;
}
int evaluate(int (*f)(int, int), int x, int y) {
	return f(x, y);
}
int main() {
	cout << add(2, 3) << '\n';
	cout << multiply(2, 3) << '\n';
	//똑같은 걸 아래와 같이 표현도 가능.
	cout << evaluate(&add, 2, 3) << '\n';
	cout << evaluate(&multiply, 2, 3) << '\n';
}

벡터에서

int main() {
	vector<double> vec(10);
	cout << "please enter 10 numbers:";
	for (double& elem : vec)
		cin >> elem;
	for (double elem : vec)
		cout << elem << endl;
}

입력을 (main함수 말고)따로 받을 때, 포인터*와 &차이

#include <iostream> 
#include <string> 
using namespace std; 

void input(string &str) { 
	cout << "input>"; 
	cin >> str; 
} 
int main() { 
	string str = "this is default value"; 
	cout << "기본값 출력>" << str << endl; 
	input(str); 
	cout << "변환된 값 출력" << str; 
}

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


void input(string *str) {
	cout << "input> ";
	cin >> *str;
}
int main()
{
	string str = "This is default value";

	cout << "기본값 출력> " << str << endl;
	input(&str);

	cout << "변환된 값 출력> " << str;
}