[Tistory] 강의 내용 정리(Section_3/포인터, const, 참조 등)

원글 페이지 : 바로가기

강의 중 배운 내용과 추가적으로 배워야 할 부분들을 정리한 메모장 입니다. 강의 : (인프런) 게임 프로그래머 입문 올인원 포인터 연산 : 포인터는 값을 증가시키거나 감소시키는 등의 제한된 연산만을 할 수 있습니다. 포인터 변수에 대한 연산은 포인터 변수의 자료형과 연관이 있습니다. 포인터 변수에 값을 더하거나 빼는 연산은 포인터 변수가 가리키고 있는 주소에 저장된 자료형의 크기 만큼 주소를 증감 시킵니다. ptr + i 가 가리키는 주소 : ptr+(i바이트)가 아닌 ptr+(i*sizeof(*ptr)바이트) 포인터 변수에 대한 연산은 메모리에 저장된 자료를 포인터 변수로 처리하기 위해서 입니다. 그렇기 때문에 모든 연산자를 사용할 수 있는 것은 아니고, 현재 자료의 다음 또는 이전 자료를 처리하는 증감 연산만 가능 합니다. 산술 연산자 +, – , ++, — 주소 연산자 &, * 대입 연산자 =, += , -= 기타 연산자 sizeof 간접 연산자 * 간접 멤버 연산자 (구조체 포인터를 이용하여 멤버에 접근할 때 사용하는 연산자) -> ◆ C++의 포인터 연산의 규칙 1. 포인터끼리의 덧셈, 곱셈, 나눗셈은 아무런 의미가 없습니다. 2. 포인터끼리의 뺄셈은 두 포인터 사이의 상대적 거리를 나타냅니다. 3. 포인터에 정수를 더하거나 뺄 수 는 있지만, 실수와의 연산은 허용하지 않습니다. 4. 포인터끼리 대입하거나 비교 할 수 있습니다. 포인터와 배열의 관계 : 포인터와 배열은 매우 긴밀한 관계를 맺고 있으며, 어떤 부분에서는 서로를 대체할 수도 있습니다. 배열의 이름은 그 값을 변경할 수 없는 상수라는 점을 제외하면 포인터와 같습니다. C++에서는 배열의 이름을 포인터처럼 사용 할 수 있을 뿐만 아니라, 포인터를 배열의 이름처럼 사용할 수도 있습니다. 즉, C++에서는 배열의 이름이 주소로 해석되며, 해당 배열의 첫 번째 요소의 주소와 같게 됩니다. int arr[3] = {10, 20, 30}; // 배열 선언
int* ptr = arr; // 포인터에 배열의 이름을 대입함

cout << "배열의 이름을 이용하여 배열 요소에 접근 : " << arr[0] << "," << arr[1] << "," << arr[2] << endl; cout << "포인터를 이용하여 배열 요소에 접근 : " << ptr[0] << "," << ptr[1] <<"," << ptr[2]<< endl; cout << "배열의 이름을 이용한 배열의 크기 계산 : " << sizeof(arr) << endl; cout << "포인터를 이용한 배열의 크기 계산 : " << sizeof(ptr) << endl; 예제 코드 결과 값 배열의 이름을 이용한 크기 계산에서는 배열의 크기가 int형 배열 요소 3개의 크기인 12바이트로 제대로 출력 됩니다. 하지만 포인터를 이용한 크기 계산에서는 배열의 크기가 아닌 포인터 변수 자체의 크기가 출력되는 차이가 있습니다. 예제속 배열의 크기 : 12바이트 포인터 변수의 크기 : 8바이트 배열의 포인터 연산 배열의 이름으로 포인터 연산을 진행하여 배열의 요소에 접근 합니다. int arr[3] = {10, 20, 30}; // 배열 선언 cout << "배열의 이름을 이용하여 배열 요소에 접근 : " << arr[0] << "," << arr[1] << "," << arr[2] <

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다