여러분 안녕하세요. 이 동영상 강의에서는 구조체체에 대한 포인터와 화살표 연산자의 사용법이 무엇인지 설명하겠습니다.
이것들은 구조체를 정의하는 방법과 구조체 변수를 선언하고 초기화하는 방법입니다.
이미 이전 동영상 강의에서 이것을 설명했었습니다.
여기서 구조체를 정의했으며, 구조체의 이름 은 "student" 입니다.
여기서 구조체 변수를 선언했으며 구조체 변수의이름은 "stu1"입니다.
그리고 "name", "rollno", "marks"라는 3 개의 필드가 있습니다.
"stu1"의 이름은 "Jakes"이고 "rollno"는 22이며 "marks"(점수)는 55.5입니다.
핵심 주제로 돌아가겠습니다. 아시다시피 포인 터는 변수형이 "int", "char", "float"등의 유형으로, 다른 변수의 주소를 저장할 수 있는 변수입니다.
"stu1"도 변수이고, struct student 유형의 변수입니다.
"stu1"은 구조체이고, 포인터를 사용하여 이 구조체 주소를 저장할 수 있습니다.
여기에서 포인터 *ptr을 사용하여이 구조체 변수"stu1"의 주소를 저장할 수 있습니다.
그러기 위해서는 먼저 포인터를 선언해야합니다. 저는 struct student 유형을 갖는 "ptr"이라 는 포인터를 선언했습니다.
그런데, 왜 "struct student" 유형의 포인터를 선언했을까요? 일반적으로 포인터로 작업 할 때 유형이 "int"인 변수의 주소를 저장해야하는 경우, "int"유형의 포인터로 선언해야 합니다.
마찬가지로, "float"유형의 변수의 주소를 저장해야하 는 경우 "float"유형의 포인터를 선언해야합니다.
그래서, 같은 원칙에서, "struct student"유형의 변수 주소를 저장해야하기 때문에, 유형의 불일치가 없도록 "struct student"유형의 포인터 도 선언했습니다.
여기에서 변수 "stu1"의 주소는 포인터 "ptr"에 저장됩니다.
이제 포인터 "ptr"은 구조체 변수 "stu1"의 주소를 안내합니다.
이제 이 포인터 "ptr"의 도움으로 이 모든 "stu1"값에 접근(제3자 입고/제3자 출고) 할 수 있습니다.
더 기술적으로 설명하면, "구조체 포인터 "ptr "을 사용하면 구조체의 구성요소(member)에 접근할 수 있다"라고 말할 수 있습니다.
이제 구조체 포인터를 사용하여 구조체의 구성요소(member)에 접근(제3자 입고/제3자 출고)하는 방법을 소개하겠습니다.
"*ptr"를 사용하여, 값에 접근(제3자 입고/제3자 출고)합니다.
그런 다음 구조체의 구성요소(member)에 접근(제3자 입고/제3자 출고)하기 위해 "."연산자와 구성요소(member)이름, 이 경우 "name"을 사용합니다.
다음으로도 포인터명(*ptr), "." 연산자, 구성요소(member)의 이름 순으로 넣어줍니다.
그 다음으로도 포인터명(*ptr), "." 연산자, 구성요소(member)의 이름 순으로 넣어줍니다.
그러나, 구문에 약간의 문제가 있습니다.
당연히, 이 프로그램을 컴파일하면, 오류가 납니다.
"*"연산자보다 "." 연산자를 먼저 읽습니다.
그런데, 이 부분(*ptr)가 먼저 실행되어야만, 정상적으로 동작하게 되죠.
따라서, 이*ptr을 괄호 안에 넣어야 합니다. 괄호안에있는 것은 항상 먼저 처리되기 때문입니다. ((*ptr))
이제 "*ptr"이 먼저 처리됩니다. 그리고 지금이 프로그램을 컴파일하면 오류가 발생하지 않습 니다.
이제 이러한 유형의 구문은 혼란 스러울 수 있 습니다. 그래서 간단한 표현이 함께 있습니다.
따라서, 포인터를 사용하여 구조체의 구성요소(member)에 접근(제3자 입고/제3자 출고)하는데 사용되는 특수 연산자가 있습니다.
그리고 그 연산자는 화살표 연산자입니다. 이 화살표 연산자는 이러한 유형의 구문을 성공적 으로 대체 할 수 있습니다.
따라서, 대부분의 프로그램에서 이러한 유형의 구문 대신 화살표 연산자(->)가 사용합니다. 이것이 화살표 연산자(->)입니다.
이제 이 프로그램을 실행하면이 구조체 변수 "stu1"의 모든 값이 출력됩니다.
"Jakes 22 55.5"가 출력되었죠?
이것으로 이 강의를 끝내겠습니다. 모든 것이 명확하기를 바라며, 시청 해 주셔서 감사합니 다. 번역: 인턴 김연의 (yeonui97@gmail.com), 부분 수정 : 박기태 총괄 (12000@12000.co)f