[C++] 18. 구조체변수의 포인터 vs 정수형변수의 포인터
2022. 5. 31. 18:55ㆍ코딩 1막 <C++개념편>
728x90
구조체를 이전에 배웠다.
구조체는 직접 만들어서 쓰는 데이터 타입이라고 한다.
마치 도장을 찍는 것처럼
구조체와 배열을 써서 실습을 해봤다
문제는 지금부터다
'함수라는 기능을 써서 배열의 반복문을 좀 더 효율적으로 써볼 수 있지 않을까'라는 접근으로 함수를 호출해보기로 한다
그리고 구조체 포인터변수와 정수형변수의 포인터변수를 비교해볼것이다.
1. <구조체 Student의 포인터변수 >
#include <iostream>
#include <string>
using namespace std;
// 함수의 기능을 써서 구조체를 만들고 싶다
struct Student
{
string name;
int age;
int id;
};
void PrintInfo(Student target)
{
cout << "이름 : " << target.name << endl;
cout << "나이 : " << target.age << endl;
cout << "학번 : " << target.id << endl;
}
void SetInfo(Student* target, string newName, int newAge, int newId)
{
// 구조체 포인터변수의 주소에서 멤버를 참조할때는 . 이 아닌 -> 로 접근한다
target->name = newName;
target->age = newAge;
target->id = newId;
}
void main()
{
int num;
Student studentA = { "학생A", 40, 1 };
PrintInfo(studentA);
// SetInfo(studentA, "학생A-2", 41, 2); // call by value : 값을 참조하므로 원본은 바뀌지 않고 해제(출력x)
SetInfo(&studentA, "학생A-2", 41, 2); // call by address : 주소를 받아 복사 -> 포인트변수
PrintInfo(studentA);
}
※여기서 중요한 포인트는 구조체의 경우
1) 구조체는 멤버변수들이 많이 있기때문에, 주소에서 멤버(성능)를 참조할때 ' . ' 이 아닌 ' - > ' 로 접근한다는 것
2) 함수를 선언할 때 값을 참조하는지, 주소를 참조하는지..
2. <정수형 변수의 포인터 변수>
#include <iostream>
#include <string>
using namespace std;
// 데이터 타입이 int이냐 Student이냐의 차이일뿐 구조적으론 전혀 차이없다.
// 값에 의한 참조를 한다면 값이 복사되는 것이고 (콜바이밸류)
void PrintInt(int target)
{
cout << target << endl;
}
void SetInt(int* target, int value)
{
*target = value;
}
// 주소를 통해 참조를 한다면 원본의 주소를 통해 다이렉트로 참조가능 (콜바이어드레스)
void main()
{
// 정수형 변수 선언
int num = 10;
PrintInt(num);
SetInt(&num, 50);
PrintInt(num);
}
※ 여기서 중요한 포인트는 정수형 변수의 경우
- 주소에서 멤버(성능)를 참조할때 포인터 변수를 바로 선언할수있다는 것
728x90
'코딩 1막 <C++개념편>' 카테고리의 다른 글
[C++] 20. 입력 (0) | 2022.06.02 |
---|---|
[C++] 19. 멤버함수 (0) | 2022.06.02 |
[C++] 17. 구조체 (0) | 2022.05.31 |
[C++] 16. 2차원배열 (0) | 2022.05.31 |
[C++] 15. sizeof() (0) | 2022.05.31 |