차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 | |||
activity:public:2021:cpp:210706 [2021/08/12 09:15:03] – [5.2] Algern0n | activity:public:2021:cpp:210706 [2021/08/12 09:15:15] (현재) – [5.2] Algern0n | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | ======C++ 스터디 #9: 포인터(1)====== | ||
+ | | 시간 | 2021년 7월 6일 화요일 20:00 ~ 22:00 | | ||
+ | | 장소 | ZOOM | | ||
+ | | 참가자 | - | | ||
+ | |||
+ | {{youtube> | ||
+ | |||
+ | =====1. 포인터===== | ||
+ | 포인터는 주소를 가리키는 변수를 뜻합니다.\\ | ||
+ | 포인터는 다음과 같은 형식으로 선언됩니다.\\ | ||
+ | |||
+ | 자료형* 포인터변수이름; | ||
+ | |||
+ | Ex)\\ | ||
+ | int* p;\\ | ||
+ | double* p;\\ | ||
+ | char* p;\\ | ||
+ | short* p;\\ | ||
+ | |||
+ | |||
+ | =====2. 주소 연산자 &===== | ||
+ | & 연산자를 이용하여 변수의 주소를 포인터에 저장할 수 있습니다.\\ | ||
+ | |||
+ | p = & | ||
+ | |||
+ | 위의 코드는 number라는 변수의 주소를 계산하여 포인터 p에 저장한다는 것을 의미합니다.\\ | ||
+ | 간단한 예제를 작성해 보면 다음과 같습니다. | ||
+ | <sxh cpp> | ||
+ | int number = 10; // 변수 정의 | ||
+ | int* p; // 포인터 정의 | ||
+ | |||
+ | p = & | ||
+ | </ | ||
+ | {{: | ||
+ | \\ | ||
+ | |||
+ | =====3. 간접 참조 연산자 *===== | ||
+ | 간접 참조 연산자 *를 통해 포인터가 가리키는 메모리 공간의 값을 읽어오거나 변경할 수 있습니다.\\ | ||
+ | 포인터 p가 가리키는 메모리 공간의 내용을 가져오려면 ***p**하면 됩니다. 이것을 포인터를 통하여 간접 참조한다고 합니다.\\ | ||
+ | {{: | ||
+ | |||
+ | =====4. 이중 포인터===== | ||
+ | 이중 포인터는 포인터의 포인터입니다. 즉 포인터의 메모리 주소를 저장하는 포인터를 의미합니다.\\ | ||
+ | 포인터를 선언할 때 *를 두 번 사용하면 이중 포인터를 선언하게 됩니다.\\ | ||
+ | 간단한 예제를 작성해 보면 다음과 같습니다.\\ | ||
+ | <sxh cpp> | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | int* numPtr1; | ||
+ | int** numPtr2; | ||
+ | int num1 = 10; | ||
+ | | ||
+ | numPtr1 = & | ||
+ | | ||
+ | numPtr2 = & | ||
+ | | ||
+ | cout << **numPtr2 << endl; // 포인터를 두 번 역참조하여 num1의 메모리 주소를 출력 | ||
+ | | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | \\ | ||
+ | |||
+ | =====5. 예제===== | ||
+ | ====5.1==== | ||
+ | 다음 소스 코드를 완성하여 10과 20이 각 줄에 출력되게 만드세요.\\ | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | \\ | ||
+ | 답안 예시 | ||
+ | \\ | ||
+ | |||
+ | <sxh cpp> | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | int* numPtr; | ||
+ | int num1 = 10; | ||
+ | int num2 = 20; | ||
+ | |||
+ | numPtr = &num1; | ||
+ | cout << *numPtr << endl; | ||
+ | |||
+ | numPtr = &num2; | ||
+ | cout << *numPtr << endl; | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | \\ | ||
+ | |||
+ | ====5.2==== | ||
+ | 표준 입력으로 정수가 입력됩니다. 다음 소스 코드를 완성하여 입력된 정수가 출력되게 만드세요.\\ | ||
+ | {{: | ||
+ | |||
+ | **입력: 10**\\ | ||
+ | **출력: 10**\\ | ||
+ | |||
+ | \\ | ||
+ | 답안 예시 | ||
+ | \\ | ||
+ | |||
+ | <sxh cpp> | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | int* numPtr1; | ||
+ | int** numPtr2; | ||
+ | int num1; | ||
+ | |||
+ | cin >> num1; | ||
+ | |||
+ | numPtr1 = &num1; | ||
+ | numPtr2 = & | ||
+ | |||
+ | cout << **numPtr2 << endl; | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </ |