Program Language/C & C++

[C++] 구조체 (structure)

야곰야곰+책벌레 2021. 12. 29. 18:25
728x90
반응형

배열은 동일한 유형의 요소 집합이다. 가장 단순한 형태의 구조체는 임의 유형의 요소 집합이다.

struct Address {
	const char∗ name; // "Jim Dandy"
	int number; // 61
	const char∗ street; // "South St"
	const char∗ town; // "New Providence"
	char state[2]; // 'N' 'J'
	const char∗ zip; // "07974"
};

이것은 미국 내 누군가에게 메일을 보내기 위해 필요한 항목으로 구성된 Address라는 유형을 정의한다. 종료를 위한 세미콜론(;)을 잊지 말자.

Address 유형의 변수는 다른 변수와 똑같이 선언할 수 있으며 개별 멤버는 점(.) 연산자를 사용하여 접근할 수 있다.

void f()
{
	Address jd;
	jd.name = "Jim Dandy";
	jd.number = 61;
}

구조체 유형의 변수는 {} 표기법을 사용하여 초기화할 수 있다.

Address jd = {
	"Jim Dandy",
	61, "South St",
	"New Providence",
	{'N','J'}, "07974"
};

jd.state는 "NJ" 문자열로 초기화할 수 없다. 문자열은 zero-character '\0'으로 끝나므로 "NJ"에는 3개의 문자가 있다. 하나는 jd.state에 맞는 것보다 많다. 그것이 어떻게 가능하고 어떤 종류의 문제를 일으킬 수 있는지 설명하기 위해서 의도적으로 다소 낮은 수준의 유형을 사용했다.

구조체는 종종 ->(구조체 포인터 역참조) 연산자를 사용하여 포인터를 통해 액세스 된다.

void print_addr(Address∗ p)
{
	cout << p−>name << '\n'
		<< p−>number << ' ' << p−>street << '\n'
		<< p−>town << '\n'
		<< p−>state[0] << p−>state[1] << ' ' << p−>zip << '\n';
}

p가 포인터일 때 p->m은 (*p). m과 동일하다. 또는 참조로 구조체를 전달하고 점(.)(구조체 멤버 액세스) 연산자를 사용하여 접근할 수 있다.

void print_addr2(const Address& r)
{
	cout << r.name << '\n'
		<< r.number << ' ' << r.street << '\n'
		<< r.town << '\n'
		<< r.state[0] << r.state[1] << ' ' << r.zip << '\n';
}

구조체 유형의 객체를 할당하고, 함수 인수로 전달하고, 함수의 결과로 반환할 수 있다.

Address current;
Address set_current(Address next)
{
	address prev = current;
	current = next;
	return prev;
}

비교(== 와!=)와 같은 다른 가능한 작업은 기본적으로 사용할 수 없지만 연산자를 정의하여 사용할 수 있다.

728x90
반응형

'Program Language > C & C++' 카테고리의 다른 글

[C++] 구조체 이름  (0) 2022.01.03
[C++] 구조체 layout  (0) 2022.01.03
[C++] 포인터와 참조  (1) 2021.12.29
[C++] 참조에 대한 참조  (0) 2021.12.29
[C++] rvalue 참조  (0) 2021.12.29