새로새록
[c++] pass by address(pointer*), reference(&) , value 차이 본문
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;
}
'소프트웨어융합 > 경희대 c++ 과제' 카테고리의 다른 글
[c++] while(1) while(0), 무한루프에서 탈출하깅 (0) | 2020.07.10 |
---|---|
[c++]타입캐스트 (0) | 2020.07.09 |
[c++]++num, num++ 빌드값 차이 (0) | 2020.07.08 |
[c++] factorial 알고리즘 (0) | 2020.07.08 |
[c++]void와 static (0) | 2020.07.08 |