차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

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