2010-06-15 6 views
5

나는 Schildt의 책에서 C++을 공부하고 있으며 세 번째 구조에서 그가 무엇을 의미하는지 이해하지 못한다. 누군가가이 문제를 설명 할 수 ->구조체 접근의 C++ 배열

이 내에서 구조체의 배열을 특정 구조에 액세스하려면 다음을 수행해야 인덱스 구조 이름을. 예를 들어, 에 구조의 on_hand 멤버를 표시하려면 cout < < invtry [2] .on_hand를 작성하십시오.

일부 코드 :

struct type{ 
char item[40]; 
double cost; 
double retail; 
int on_hand; 
int lead_time; 
}invtry[SIZE]; 
+11

대부분의 사람들이 Schildt의 책을 경멸한다고 생각합니다 ... – hbw

+3

그래, 그리고 이것은 하나의 이유입니다. 구조체 이름이 아니라 배열 이름을 색인화해야합니다. 그는 코드를 가지고 있지만 exmplanation은 잘못되었습니다. 예제에서'invtry'는 배열 이름이고 구조체 이름은'type'입니다. 자신의 논리에 따라 코드는'cout << type [2] .on_hand'이어야합니다. – MSalters

+2

나에게 묻는다면, 타입을 정의하고 같은 타입으로 배열을 선언하는 것은 처음에는 "하지 마라". –

답변

5

구조체의 배열의 세 번째 구성은 어레이 내의 제 3 위치에 배치 한, 즉, 인덱스 2

와 하나하여 (못생긴) 코드 invtrytype 유형의 구조 배열 (크기는 SIZE)로 선언되었습니다. 그러므로 invtry[0]은 첫 번째 요소이고 두 번째는 invtry[1]이고 세 번째는 invtry[2]입니다. 물론, SIZE >= 3이라고 가정합니다.


일반적으로, 당신은 작성합니다

struct type{ 
char item[40]; 
double cost; 
double retail; 
int on_hand; 
int lead_time; 
}; 

const int SIZE = 500; 

type invtry[SIZE]; 

이 당신이 물론 SIZE의 정의를 제외하고, 쓴 것과 동의어이다. 하지만 덜 혼란 스럽습니다. 한 부분에서 type (구조체에 대한 끔찍한 이름)이 무엇인지 말합니다. 즉, type을 정의합니다. 나중에 invtry이라는 type 유형의 구조체 배열을 만듭니다.

저자가 그랬던 것처럼 같은 줄에서이 작업을 수행하는 것은 단순히 내 눈에 끔찍한 일입니다.

이제 500 개의 구조체 배열이 있습니다. "type"이 "Product"인 경우 500 개의 제품을 나타내는 배열이 있습니다. 각 항목, 비용, 소매 등

배열의 세 번째 구조체에 액세스하려면 invtry[2]을 작성하십시오. 특정 on_hand 필드에 액세스하려면 invtry[2].on_hand을 입력하십시오. 이것은 정의 된 유형의 레이아웃에서 on_hand의 특정 위치와 아무런 관련이 없습니다.

세 번째 구조의 lead_time을 원할 경우 먼저 세 번째 구조체에 액세스 한 다음 lead_time 멤버 (invtry[2].lead_time)에 액세스하십시오.

유형에는 기본 (매개 변수없는) 생성자가 없으므로 물론 500 개 제품은 초기화되지 않았습니다. 이러한 제품에는 가비지가 있습니다. 그러나 그것은 당신의 문제입니다.

+0

는 그래서 구조체 타입처럼이다 { 문자 항목 [40]; // 0 이중 선정 // 1 개 이중 소매 // 2 INT on_hand // 3 INT의 lead_time // 4 } 인형 [SIZE]; – highlevelcoder

+0

@learningtolive 아니, 이건 말도 안돼. 제 대답의 두 번째 부분을 읽으십시오. –

+0

어떤 색인을 통해 lead_time 멤버에 액세스합니까? inv [t] .lead_time – highlevelcoder

1

'구조'에 '배열 항목'을 사용해보십시오.

invtry 배열의 세 번째 항목 (구조체 배열)에 액세스하려면 invtry [2] (인덱스가 0 인 3 대신 2)를 사용하고 그 다음에 멤버 변수 당신은 읽고 싶습니다 ...

즉 invtry [2].on_hand는 'invtry'배열에있는 세 번째 구조체의 'on_hand'값을 가져옵니다.

+0

나는 C 배열이 0을 기반으로한다는 사실에 의해 OP가 혼란 스럽다는 것을 내기하고 있습니다. 당신의 설명이 훨씬 더 좋을 것 같아요. :-) – Omnifarious

+0

고마워, 나는 너와 거기에 동의한다! 조금은 서둘 렀습니다. – Dave

0

Schildt 서적에서 배우려고하면 안됩니다. 그들은 심각하게 결함이 있습니다. 많은 정보가 심각하게 오래되었거나 완전히 잘못되었습니다. 코드는 많은 C-isms가있는 추악하고 나쁜 스타일로 작성되었습니다. 그의 책에 대한 자세한 리뷰는 ACCU 도서 리뷰를 참조하십시오.

좋은 초보자 가이드를 위해 Koenig and Moo 또는 "Programming Principles and Practice using C++"에서 Stroustrup의 "Accelerated C++"를 사용해보십시오.

+0

C++ Primer Plus는 제 2 레퍼런스입니까? – highlevelcoder

+0

@ learning : 나는 C++ Primer Plus에 대해서만 긍정적 인 것들을 들었습니다! – fredoverflow

+0

Stroustrup은 내가들은 것을 초보자에게 권장하지 않습니까? – highlevelcoder